2012-04-30 15 views
2

これは私がこれまで試したものです:ostream演算子<< pimplクラスのオーバーロード方法

class Fahrzeug 
{ 
public: 

    std::string Id() const; 
    void Id(const std::string &id); 

    friend std::ostream& operator<< (std::ostream &out, const Fahrzeug &fzg) 
    { 
     out << Id(); 
     return out; 
    } 

private: 
    struct DatenImpl; 
    boost::scoped_ptr<DatenImpl> _datenImpl; 
}; 

これはコンパイラエラーを生成:

error C2352: Id() - illegal call of non-static member function

どのように私は "pimpled" クラス用のostream演算子< <を実装することができますか?

答えて

9

あなたの定義は次のようになります。

friend std::ostream& operator<< (std::ostream &out, const Fahrzeug &fzg) 
{ 
    out << fzg.Id(); // <--- qualify call to Id() 
    return out; 
} 

class内で定義されたものの、オペレータは、classメンバーではありません。

+0

すぐにお返事ありがとうございます。エラーメッセージが実際にそれを簡単にしたので、明白であったはずです... – nabulke

関連する問題