gpt4 book ai didi

c++ - 运算符重载错误 "binary ' +' : no operator found which takes a left-hand operand"

转载 作者:行者123 更新时间:2023-11-28 07:00:02 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com