class没有成员“operator<<”

时间:2013-03-11 02:46:34

标签: c++ insertion ostream

我已阅读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放在公共场合并没有帮助)

1 个答案:

答案 0 :(得分:7)

它不是Animal类的成员,也不应该是成员。所以不要把它定义为一个。通过删除Animal::前缀将其定义为自由函数。

ostream & operator<< (ostream & o, Dog & d){
    //...
}