2012-04-15 24 views
1

私の場合、< <オペレータが正しく呼び出されていない場合に、少し問題があります。バーチャル<< operator

class SomeInterface 
{ 
    friend std::ostream& operator<<(std::ostream& str, const SomeInterface& data); 

    protected: 
     virtual void print(ostream& str) const = 0; 
}; 

inline std::ostream& operator<< (std::ostream& o, SomeInterface const& b) 
{ 
    b.print(o); 
    return o; 
} 
} 

呼び出すコードは次のようになります::

SomeInterface* one = new someConcrete(); 
cout << one; 

私はインターフェイスで呼び出さなるだろう期待していた< <オーバーロードされた関数ではなく、ましてや派遣

この

は私が持っているものです派生クラスに渡します。

答えて

3

試してください:あなたのoperator<<const SomeInterface&参照をとりながら

cout << *one; 

あなたのコードは、ポインタを印刷するように求めています。

+0

おかげで...私はそれはのようなアドレスを印刷した後に推測している必要がありますごみ。 –

0

タイプoneはポインタなので、std::ostream& operator<< (std::ostream& o, void*);を呼び出しています。

試してみてください。

cout << *one; 

これは(参照)は、実際のオブジェクトを受け取るオーバーロードを呼び出します、いないポインタ自体

関連する問題