1

<< 演算子が正しく呼び出されないという小さな問題があります。

これは私が持っているものです:

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;

インターフェイスで呼び出されることを望んでいた << オーバーロードされた関数は、派生クラスへのディスパッチは言うまでもなく、そうではありません。

4

2 に答える 2

3

試す:

cout << *one;

あなたのコードはポインタを印刷するように求めていますが、あなたは参照operator<<を取りconst SomeInterface&ます。

于 2012-04-15T22:41:25.920 に答える
0

std::ostream& operator<< (std::ostream& o, void*);の型がoneポインタであるため、を呼び出しています。

試す:

cout << *one; 

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

于 2012-04-15T22:42:14.280 に答える