为我自己的类重载输出流
Overloading output stream for my own class
我有一个基类Animal,类Cat和Dog派生自该基类。
我试图重载输出流,这样我就可以做这样的事情:
Animal *a = (animal *) 0;
while(read_animal(cin, a) && a) // a has been assigned a derived class
cout << *a << 'n';
下面是我如何超载的:
ostream& operator<<(ostream &a, const animal* animal) {
return a << animal->describe() << endl;
}
但我得到了一个错误:
错误20错误C2679:二进制'<lt;':找不到接受"animal"类型右侧操作数的运算符(或没有可接受的转换)
想法?
尝试
cout << a << 'n';
由于您的过载需要const animal* animal
或者,将您的函数签名更改为:
ostream& operator<<(ostream &a, const Animal& animal) {
return a << animal.describe() << endl;
}
您的过载需要const animal*
,但您提供的是*a
,即animal
,而不是animal*
。所以你可以试试:
cout << a << 'n';
相关文章:
- 尝试重载输出运算符时,我无法遍历对象向量
- 如何在C++中编写 ostream 的向量,它接收所有不同的输出流,如 cout、ostringstream 和 ofs
- 在输出流中插入换行符
- 在类外部重载输入和输出流
- 通用容器的输出流
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 获取C++输出流中元素的大小
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 控制多线程程序中的输出流
- 为什么输出流首选" "而不是""?
- C++ 输出流运算符 <<() 中的字符何时加宽?
- 音频缓冲区列表,用于输出流格式已压缩的 AUHAL 单元
- 输出流运算符的重载
- 重载类的输出流运算符
- 为我自己的类重载输出流
- C++ 编译器选择输出流运算符<<的错误重载
- 如何将 vector 传递给将自定义对象作为参数的重载输出流
- 无法在C++中重载输出流
- 在模板外部重载模板类的输出流操作符