0

我正在尝试将 operator+ 的结果返回给 operator= 但在 operator = 中返回 *this 时得到一个虚假值;调用 rhs 并访问其函数时,值是正确的,但 operator = 没有发送类的副本有什么问题?

          VecXd& operator=(const VecXd &rhs)
           { 

              cout << rhs.vecArr[0] << " " << rhs.vecArr[1] << " " << rhs.vecArr[2] << " " << endl;
              return *this;    
           }


    VecXd& operator+(const VecXd& rhs){
    VecXd& result = *this;
      cout << "TEST FOR DIMENSION-> " << dimension << endl;
   if(result.dimension == rhs.dimension) //dimension level check
   { 

        for(int i = 0; i < rhs.dimension; i++)
      {
        result.vecArr[i] += rhs.vecArr[i];
        cout << result.vecArr[i] << " our new value" << endl;                 
      } 
      cout << result << " result test!"  << endl;

      return result;
   }
   else{
      cout << "Dimensions do not match!!! Error!" << endl;    
      } 

}

帮助?谢谢你!

4

1 回答 1

2

您不应返回对result. result是一个局部变量,退出方法时会超出范围。您很可能想要返回 的副本result,因此更改您的运算符返回类型:

VecXd operator+(const VecXd& rhs) const

这将返回类型值VecXd而不是引用。

哦,既然你正在实现 + 运算符,而不是 += 运算符,你可能想改变这个:

vecArr[i] += rhs.vecArr[i];

对此也是如此:

result.vecArr[i] = vecArr[i] + rhs.vecArr[i];

并且可能不需要result使用初始化*this

于 2013-09-19T02:59:41.317 回答