重载+运算符,以便能够使用对象的3个const实例

时间:2013-04-06 22:57:18

标签: c++ operator-overloading

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

适用于CMatrix的non-const个实例。但我做不到这样的事情:

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的重载能够编译代码吗?

3 个答案:

答案 0 :(得分:6)

这与您的operator+没有任何关系。这是因为即使您将其声明为a,也要尝试分配给const。您显然无法分配给const对象,因为这会改变其值!

也许你想这样做:

const CMatrix a = b + c;

或者a非 - const

答案 1 :(得分:1)

你将'b + c'分配给一个恒定的CMatrix。

应该是:

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

答案 2 :(得分:0)

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

const CMatrix a = b + c;
正如sftrabbit所示。否则,(你最初的尝试方式),只是试图获取两个常量的总和并强制转换为另一个常量,如果它是一个常量则无法完成....因为它不会是一个常量值它已经改变了。