为什么算子'='不匹配?
why operator '=' can not match?
我经常收到编译错误:
"bObj1"中的"operator="不匹配=余额::运算符+(Balance&)(((Balance&)(&bObj2))'
你能帮我指出原因吗?提前谢谢。
代码:
class Balance
{
public:
Balance (int b = 0) {balance = b;};
Balance (Balance &);
Balance & operator= (Balance &);
Balance operator+ (Balance &);
int get() {return balance;};
void set(int b) {balance = b;};
private:
int balance;
};
Balance & Balance::operator=(Balance ©)
{
balance = copy.get();
return *this;
}
Balance Balance::operator+ (Balance &rig)
{
Balance add;
add.set(this->get() + rig.get());
return add;
}
int main()
{
Balance bObj1, bObj2(100);
bObj1 = bObj2;
bObj1 = bObj1 + bObj2; // This line cause the error.
return 0;
}
您的赋值运算符错误。您可以安全地删除它,因为隐式运算符对于您的简单类来说已经足够了。阅读我什么时候需要写一个赋值运算符?了解更多详细信息。
class Balance
{
public:
Balance (int b = 0) {balance = b;};
Balance operator+ (const Balance &);
int get() const {return balance;};
void set(int b) {balance = b;};
private:
int balance;
};
Balance Balance::operator+ (const Balance &rig)
{
Balance add;
add.set(this->get() + rig.get());
return add;
}
在使用带有非常量引用的运算符重写时会出现问题。将您的函数更改为const:
Balance & operator= (const Balance &);
Balance operator+ (const Balance &) const;
int get() const { return balance; }
当应用+
运算符时,结果是不可变的右值。因为=
无法接受rvalue
引用(因为它不是常量),所以编译器无法匹配运算符。
在上面,我已经使您的函数对值友好。=
运算符将接受一个右值。+
运算符也接受右值,并且是const
,因为它不修改对象。因为它是const,所以我也将get
函数设置为const。
相关文章:
- 为什么我收到错误:"运算符<<不匹配?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 为什么我的数组值与此处的全局变量不匹配?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 为什么一次包装 typedef 函数签名与原始签名不匹配
- 作为模板类型参数,为什么 type[N] 与其专用版本不匹配----模板<类 T>类 S<T[]>
- 如果在开关情况下不匹配,为什么此函数返回 ASCII 值?
- C STD Regexp为什么不匹配
- 为什么这个"uint64_t"模板专用化与 Mac 平台上的"无符号长"不匹配?
- 不匹配新[]和删除,为什么没有内存泄漏
- 为什么在使用"std::find"时,错误与"运算符=="不匹配?
- 为什么此代码编译 (C++11) 而没有类型不匹配错误
- 为什么regex_match与我的正则表达式不匹配
- Curly Braces构造函数更喜欢initializer_list而不是更好的匹配.为什么
- 为什么构造函数的数量与Destructor调用的数量不匹配
- 为什么我们有一个类型不匹配
- 为什么在列表initialization函数参数时,显式构造函数不匹配
- 为什么我没有警告枚举比较不匹配
- 为什么迭代器类型与矢量容器中的 value_type * 不匹配