0

我在为 CMatrix 类中的 const 实例定义重载运算符 + 时遇到了麻烦。我已经有了这个 + operator定义 CMatrix operator+(const CMatrix &matrix) const;

它适用于non-constCMatrix 的实例。但我不能做这样的事情:

const CMatrix a;
const CMatrix b;
const CMatrix c;
a=b+c;

尝试编译源代码时出现此错误:error: passing ‘const CMatrix’ as ‘this’ argument of ‘CMatrix& CMatrix::operator=(const CMatrix&)’ discards qualifiers

谁能告诉我,如何定义重载以便+ operator能够编译代码?

4

3 回答 3

6

这与你的operator+. 这是因为a即使您将其声明为const. 你显然不能分配给一个const对象,因为这会改变它的价值!

也许你想做的是:

const CMatrix a = b + c;

或使aconst.

于 2013-04-06T22:58:49.700 回答
1

您将 'b+c' 分配给常量 CMatrix。

它应该是:

CMatrix a;
const CMatrix b;
const CMatrix c;
a=b+c;
于 2013-04-06T22:59:44.340 回答
0

如果您计划将 b 和 c 设置为您拥有的任何常数,并且如果您在其他地方使用它们,我会选择 Dylan McKay 的解决方案。如果您正在寻找 a = b + c,则“a”不能是 const,除非您将其设置为

const CMatrix a = b + c;

正如 sftrabbit 所示。否则,(你最初是如何尝试的),只是试图取两个常数的总和并强制进入另一个常数,如果它是一个常数就不能这样做......因为那样它就不是一个常数值再说了,它会改变的。

于 2013-04-07T00:54:58.370 回答