我已阅读Should operator<< be implemented as a friend or as a member function?和Overloading Insertion Operator in C++,看起来像是类似的问题,但没有解决我自己的问题。
我的标题文件:
using namespace std;
class Animal {
private:
friend ostream & operator<< (ostream & o, Dog & d);
int number;
public:
Animal(int i);
int getnumber();
};
ostream & operator<< (ostream & o, Dog & d);
我的cpp:
using namespace std;
int Animal::getnumber(){
return number;
}
ostream & Animal::operator<< (ostream & o, Dog & d){
//...
}
Animal::Animal(int i) : number(i){}
实现很简单,但我收到错误:在cpp中 - 错误:类“Animal”类没有成员“operator&lt;&lt;”。我真的不明白,因为我已经声明插入操作符作为Animal中的朋友,为什么我仍然会收到此错误? (把ostream放在公共场合并没有帮助)
答案 0 :(得分:7)
它不是Animal
类的成员,也不应该是成员。所以不要把它定义为一个。通过删除Animal::
前缀将其定义为自由函数。
ostream & operator<< (ostream & o, Dog & d){
//...
}