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 回答