C++ostream重载不起作用

C++ ostream overloading not working

本文关键字:不起作用 重载 C++ostream      更新时间:2023-10-16

编辑:

经过一些评论,这是我的代码现在,下面是这个链接。(更好,但我仍然有一个错误)

与众不同:

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_stream>std::char_traits>&amp__cdecl运算符&lt<(类std::basic_stream>&,类设备const&)"(??6@YAAAV$basic_ostream@DU$char_traits@D@std@@@std@@AAV01@ABVDevice@@@Z)在函数"void __cdecl print_devices(class Node*)"中引用(?print_devices@@YAXPAV$Node@VDevice@@@@@Z)

原件:

有人教我操作员过载是这样的:

ostream& Device::operator<<(ostream &out) {
    out << "Device " << this->name << " Has an ID of: " << this->id;
    return out;
}

但是当尝试使用这种过载-(设备类型为设备)

cout << device << endl;

它在读写中标记-

错误C2679二进制'<lt;':找不到占用右手的运算符类型为"设备"的操作数(或没有可接受的转换)

为什么会出现此错误,以及如何修复?我在网上看了看,但找不到在类内部工作的方法,只有这个:

朋友ostream&运算符<lt;(ostream&out,Point&cPoint);

这对我也不起作用。

您在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函数,它引用了ostreamDevice常量引用,但您提供的函数在Device前面漏掉了const

重载C++STL方法

我不相信你能让<lt;基于该答案对STL流执行运算符。

您发布的错误是编译器找不到函数实现。

#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;
}