c – g 4.5找不到好友功能

天儿真好!

我有一个关于在C中使用朋友的问题.考虑以下代码:

#include <ostream>

struct F {
};

struct N {
  friend std::ostream& operator<< (std::ostream&, const N&);
  friend std::ostream& operator<< (std::ostream&, const F&);    
};

void foo(std::ostream &out) {
  F bar;
  out << bar;
}

我的理解总是如此,那个朋友类似于static,其友元函数可以访问类的私有部分.在该假设下,代码应该编译,因为存在运算符<<需要一个ostream&和(const)F&amp ;. 似乎g 4.0分享了我对此的看法,因为它接受了这个代码.然而,更新的g 4.5(.2)拒绝带有消息的代码:

ns.cc: In function 'void foo(std::ostream&)':
ns.cc:14:10: error: no match for 'operator<<' in 'out << bar'

是g 4.5错了还是我(和g 4.0)错了?

(将友元声明移动到F类的解决方案没有帮助,因为运算符<<将需要访问N的私有部分.) 问候,
斯特凡

解决方法:

您还必须在结构外部声明运算符. gcc 4.4报告了相同的错误.

#include <ostream>

struct F {
};

struct N {
  friend std::ostream& operator<< (std::ostream&, const N&);
  friend std::ostream& operator<< (std::ostream&, const F&);    
};

std::ostream& operator<< (std::ostream&, const N&);
std::ostream& operator<< (std::ostream&, const F&);    

void foo(std::ostream &out) {
  F bar;
  out << bar;
}
上一篇:智能玩具 扫码 绑定玩具 玩具列表


下一篇:第一个微信小项目