作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
class CFruit {
private:
string m_name;
public:
string getName() const;
CFruit(string name = "NoName");
};
fruitsalad 在类 CFruitSalad 中表示:
class CFruitSalad {
//Overloaded Operators
friend ostream& operator <<(ostream& out, const CFruitSalad& f);
friend CFruitSalad operator +(const CFruit& f1, const CFruit& f2);
private:
string m_fruitsalad;
public:
CFruitSalad(string content = "");
string getName() const;
};
现在当我使用时写这个:
CFruit f1("Apple");
CFruit f2("Orange");
CFruit f3 ("Banana");
CFruitSalad fs;
fs = f1 + f2 + f3; //this line generates the error
cout << "Content: " << fs << endl;
编译程序时收到以下错误:错误 C2678:二进制“+”:未找到采用“CFruitSalad”类型的左侧操作数的运算符(或者没有可接受的转换)
为什么会出现这个错误,如何解决?
最佳答案
fs = f1 + f2 + f3;
无论评估的顺序如何(假设首先评估f2+ f3
),它都会根据您在此处的声明首先返回一个CFruitSalad
的对象:
friend CFruitSalad operator +(const CFruit& f1, const CFruit& f2);
现在,对于下一个 +
操作,您要添加一个 CFruit
对象和一个 CFruitSalad
对象,您没有采用一个 CFruit
和一个 CFruitSalad
的重载版本,这会导致错误。
您需要更改重载的 operator+
的实现(恕我直言,如果它没有真正意义,请不要重载运算符)。
关于c++ - 运算符重载错误 "binary ' +' : no operator found which takes a left-hand operand",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22617748/
我是一名优秀的程序员,十分优秀!