C++ 重载运算符 << 让我做噩梦

标签 c++ class operator-overloading

我查看了与我的问题相关的所有其他线程,例如:

Overloading the << operator

operator << overload

我觉得我很接近解决我的问题,但没有成功。我希望你们能提供帮助。

我有下面的示例代码,我需要让他编译:

auto fan3 = std::make_shared<Fan>(3,"Not Connected");

//.... lots of code

std::cout << "User: " << *fan3 << " not connected" << std::endl;

我收到错误“二进制表达式的无效操作数('basic_ostream >' 和'mtm::Fan')”,所以我认为我需要实现 << 运算符。

我尝试将以下内容放入 fan.h 中:

friend std::ostream& operator<<(std::ostream& os, Fan& fan);

但我收到“ undefined symbol ”。将它放在类之外(当然没有“ friend ”)会导致同样的错误。

我想我对这种行为有些不太了解 - 我确实实现了其他运算符重载,但 << 到目前为止只是给我带来了麻烦。

请向我解释我缺少什么以及如何解决这个问题。 感谢您的宝贵时间!

最佳答案

您需要像这样声明一个自由函数:

std::ostream& operator<<(std::ostream& os, const Fan& fan);

然后像这样实现它:

std::ostream& operator<<(std::ostream& os, const Fan& fan)
{
    return os << fan.whatever;
}

如果您的类在命名空间中而不是在类本身中,则应在您的类的命名空间中完成此操作。

关于C++ 重载运算符 << 让我做噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160145/

相关文章:

html - CSS - 在 UL 的类中调用 id 以在悬停时显示 div

c++ - 将一个派生类声明为 friend 以访问基类的私有(private)成员

ruby - Ruby 类名被大写的真正原因是什么?

c++ - UNIX文件读写优于不写

c# - 在不同的类类型上创建方法

c++ - 取消引用适用于 ptr->operator*() 但不适用于 *ptr

c++ - 使用非成员函数重载运算符

C++ 运算符重载

c++ - 虚函数上未解析的外部符号

c++ - "Overload"基于模板参数个数的模板