我想在分配新值之前进行尺寸检查。所以我这样做了:
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
谢谢!
答案 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/
这是我获得解决方案的博客,您也可以找到答案