我在为我的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
的重载能够编译代码吗?
答案 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所示。否则,(你最初的尝试方式),只是试图获取两个常量的总和并强制转换为另一个常量,如果它是一个常量则无法完成....因为它不会是一个常量值它已经改变了。