5

私は、operator <<をフレンドとして実装する必要がありますか、それともメンバー関数として実装する必要がありますか?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){}

実装は簡単ですが、次のエラーが発生します:in cpp-エラー:クラス"Animal"クラスにメンバー"operator<<"がありません。すでにAnimalで挿入演算子を友達として宣言しているので、実際にはわかりません。なぜまだこのエラーが発生するのですか?(ostreamを公開しても役に立ちません)

4

1 に答える 1

8

それはクラスのメンバーではありませんしAnimal、そうであるべきでもありません。したがって、1つとして定義しないでください。Animal::プレフィックスを削除して、フリー関数として定義します。

ostream & operator<< (ostream & o, Dog & d){
    //...
}
于 2013-03-11T02:48:02.247 に答える