修改
经过一些评论后,这是我的代码,现在是THIS链接。(更好,但我仍然有错误)
离婚:
ostream& operator<<(ostream& out, Device& v) {
out << "Device " << v.get_name() << " Has an ID of: " << v.get_id();
return out;
}
内部设备类:
friend ostream& operator<<(ostream& os, const Device& v);
我的电话:(设备类型为Node,val返回设备)
cout << device->val << endl;
我的错误:
错误LNK2019未解析的外部符号 “class std :: basic_ostream&gt; std :: char_traits&gt; &安培; __cdecl运算符&lt;&lt;(类 std :: basic_ostream&gt; &amp;,类Device const&amp;)“ (?? 6 @ YAAAV?$ basic_ostream @ DU?$ char_traits @ d @ STD @@@ STD @@ @ AAV01 @@@ ABVDevice Z) 在函数“void __cdecl print_devices(class Node *)”中引用 (?print_devices @@ YAXPAV?$节点@ VDevice @@@@@ Z)
原始
我被告知过载运算符是这样的:
ostream& Device::operator<<(ostream &out) {
out << "Device " << this->name << " Has an ID of: " << this->id;
return out;
}
但是当试图使用这个重载时 - (设备是类型设备)
cout << device << endl;
它标记为阅读并说 -
错误C2679二进制'&lt;&lt;':找不到右侧的操作符 “设备”类型的操作数(或没有可接受的转换)
为什么我会收到此错误,我该如何解决?我在网上看了,但找不到一个在课堂上运作的方法,只有这个:
朋友ostream&amp;运营商LT;&LT; (ostream&amp; out,Point&amp; cPoint);
这对我也不起作用。
答案 0 :(得分:2)
您在Device
课程中声明的内容是
friend ostream& operator<<(ostream& os, const Device& v);
但是你提供的实现是
ostream& operator<<(ostream& out, Device& v) {
out << "Device " << v.get_name() << " Has an ID of: " << v.get_id();
return out;
}
不一样!你告诉编译器有一个friend
函数,它引用ostream
和 const 引用Device
- 但是你提供的函数遗漏了const
前面的Device
。
答案 1 :(得分:0)
我不相信你可以重载&lt;&lt;基于此答案的STL流上的运算符。
答案 2 :(得分:0)
您发布的错误是关于编译器未找到函数实现的。
#include <iostream>
struct MyType
{
int data{1};
};
std::ostream& operator<< (std::ostream& out, const MyType& t)
{
out << t.data;
return out;
}
int main()
{
MyType t;
std::cout << t << std::endl;
return 0;
}