C++复制构造函数、赋值'operator='
C++ copy constructor, assignment 'operator='
我正在尝试创建一个复制构造函数或=操作符。如果我定义一个名为a的矩阵,另一个为B和C,并使用'='运算符作为:
= B
表现很好,但是如果我使用
A = B + C我得到这个错误:没有匹配'='的函数。
关键是当我将符号(=)更改为(==)时,它工作得很好,即使在A == B+C的情况下,但是仅使用等号(=)它不起作用!什么好主意吗?
头文件:
Simple2DMatrixD (const Simple2DMatrixD& matrixA)
{
numRows = matrixA.numRows;
numCols = matrixA.numCols;
dataArray = new double[numRows * numCols];
for (int iX = 0; iX < numRows; iX++)
{
for (int iY = 0; iY < numCols; iY++)
{
dataArray[(iX * numRows) + iY] = matrixA.getElement(iX,iY) ;
}
}
}
Simple2DMatrixD & assign (const Simple2DMatrixD & matrixB);
Simple2DMatrixD & sum (const Simple2DMatrixD & matrixA, const Simple2DMatrixD & matrixB);
//加法运算符
friend Simple2DMatrixD operator+ (Simple2DMatrixD & matrixA, Simple2DMatrixD & matrixB)
{
Simple2DMatrixD matrixTemp(matrixA.numRows, matrixA.numCols);
matrixTemp.sum(matrixA, matrixB);
return (matrixTemp);
}
//操作符
Simple2DMatrixD & operator= (const Simple2DMatrixD & matrixB)
{
this->assign(matrixB);
return (*this);
}
//在源文件中:
Simple2DMatrixD & Simple2DMatrixD::assign (const Simple2DMatrixD & matrixB)
{
for (int r = 0; r < numRows; r++)
{
for (int c = 0; c < numCols; c++)
{
this->setElement(r, c, matrixB.getElement(r, c));
}
}
return (*this);
}
Simple2DMatrixD & Simple2DMatrixD::sum (const Simple2DMatrixD & matrixA, const Simple2DMatrixD &
matrixB)
{
// TODO REPLACE WITH COMPAREDIMENSION FUNCTION
if ((this->numRows == matrixB.numRows)
&& (this->numCols == matrixB.numCols)
)
{
for (int r = 0; r < matrixA.numRows; r++)
{
for (int c = 0; c < matrixA.numCols; c++)
{
this->setElement(r, c, matrixA.getElement(r, c) + matrixB.getElement(r, c));
}
}
return (*this);
}
else
{
throw " Dimensions does not match!";
}
}
您正在滥用friend
说明符。您要么必须在类的定义之外声明operator+
,像这样:
inline Simple2DMatrixD operator+(Simple2DMatrixD & matrixA, Simple2DMatrixD & matrixB)
{
Simple2DMatrixD matrixTemp(matrixA.numRows, matrixA.numCols);
matrixTemp.sum(matrixA, matrixB);
return (matrixTemp);
}
并在Simple2DMatrixD
类中声明为友元:
class Simple2DMatrixD {
friend Simple2DMatrixD operator+ (Simple2DMatrixD & matrixA, Simple2DMatrixD & matrixB);
...
};
或者你可以在类的定义中声明它,像这样:
class Simple2DMatrixD {
...
Simple2DMatrixD operator+(Simple2DMatrixD const &rhs)
{
Simple2DMatrixD matrixTemp(rhs.numRows, rhs.numCols);
matrixTemp.sum(*this, rhs);
return (matrixTemp);
}
...
};
friend
外部类的定义是无效的说明符。
我的直觉告诉我,你的const
正确性是错误的地方。请发布完整的错误信息。
声明不改变对象的成员函数为const
。
struct A
{
float retunrsSomethingButDoesNotChangesA()const; // <- note the const
};
// in cpp:
float A::retunrsSomethingButDoesNotChangesA()const // <- note the const
{
return 5.5f;
}
const
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 无法赋值,因为函数'operator[]'返回常量值
- 如何重载lambda赋值的operator= ?
- C++复制构造函数、赋值'operator='