【问题标题】:friend overloaded operator without namespace std没有命名空间 std 的友元重载运算符
【发布时间】:2013-02-27 18:12:27
【问题描述】:

只是想知道是否有人能指出我正确的方向。如果我包含命名空间std,我有一个朋友提取运算符可以工作;但如果我不这样做会失败。谁能给我一个提示?

ostream& operator << (ostream &out, coins &value)

这也是一个朋友功能,所以我在我的 class.h 文件中有这个(作为朋友) 在我的 functions.h 文件(作为原型)和我的 functions.cpp 文件(逻辑)中。

我试过了

std::ostream& 运算符.... std::ostream& 运算符 std::

但我只是看不出我哪里出错了。我的编译器一直告诉我'ostream 没有命名类型'

谢谢

【问题讨论】:

  • 你是否加入了&lt;iostream&gt;
  • 那不是提取操作符:那是 insertion 操作符。

标签: c++ namespaces std friend extraction


【解决方案1】:

ostream 存在于 std 命名空间中,不要这样做 std::&lt;&lt;(这甚至没有意义!)。尽量少用霰弹枪的方法来编程;也就是说,在它起作用之前,不要只是尝试随机的东西。错误告诉你ostream(不合格)是问题所在,所以你必须先解决这个问题。

#include <iostream>

struct coins
{
    friend std::ostream& operator<<(std::ostream& sink, const coins& value);
};

std::ostream& operator<<(std::ostream& sink, const coins& value)
{
    sink << "doing coins output";
    return sink;
}

int main()
{
    coins c;
    std::cout << c << std::endl;
}

顺便说一下,这是一个插入运算符,因为您将数据插入到流中。提取将是&gt;&gt;

【讨论】:

猜你喜欢
  • 2011-12-03
  • 2016-01-24
  • 2019-02-05
  • 2016-09-09
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多