重载赋值运算符不适用于链接

时间:2013-09-19 05:12:22

标签: c++ operator-overloading

我想在分配新值之前进行尺寸检查。所以我这样做了:

Matrix.cpp

Matrix& Matrix::operator=(Matrix m){      

    // check dimensions
    if(m_rows != m.m_rows || m_cols != m.m_cols )
        fail();

    thrust::copy(d_data.begin(), d_data.end(), m.d_data.begin() );// gives error if pass in Matrix& m
    return *this;
}

Matrix.h

Matrix& operator=(Matrix m);

TEST.CPP

Matrix A, B;
... initialize B as all 1's ...
A = B;       // This works
A = B * 3.0; // Wrong, A = B
B = B * 3.0; // Wrong, B does not change

如果operator =没有重载,那就是正确的:

Matrix A, B;
... initialize B as all 1's ...
A = B;       // A is all 1's
A = B * 3.0; // A is all 3's
B = B * 3.0; // B is all 3's

谢谢!

3 个答案:

答案 0 :(得分:2)

你的方式是错误的。

thrust::copy(d_data.begin(), d_data.end(), m.d_data.begin() );

应该是:

thrust::copy(m.d_data.begin(), m.d_data.end(), d_data.begin() );

答案 1 :(得分:0)

你的副本是倒退的。您正在从当前对象复制到参数m,该参数是按值传递的。当函数返回时,复制的数据与参数一起被销毁,因此它实际上什么都不做。

如果你传递了一个规范的const &参数而不是一个值,那么这将被揭示为const正确性错误。

答案 2 :(得分:0)

你可以从这里看看,这可能会有所帮助:

http://www.programmingtunes.com/overloading-assignment-operator-in-c/

这是我获得解决方案的博客,您也可以找到答案