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

标签 c++ operator-overloading

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

矩阵.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;
}

矩阵.h

Matrix& operator=(Matrix m);

测试.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

谢谢!

最佳答案

你复制的方式不对。

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() );

关于c++ - 重载赋值运算符不适用于链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18886624/

相关文章:

C++——插入运算符、const关键字导致编译器错误

c++ - C++中的两个运算符同时重载

c++ - 重载运算符 = 作为成员函数

c++ - 如何在 VS Code 中为 C++ 开发进行初始设置?

c++ - 我可以简化这个吗?

c++ - FFmpeg C++ API 用于检测视频是否旋转(在手机上拍摄)

c++ - 非成员运算符重载是什么意思

C++20 概念要求运算符重载结合用户定义模板运算符重载函数

c++ - 大型、偶尔拼接列表的数据结构选择

c++ - Union 在内存中的存储