朋友功能应该能够访问类私有成员吗? 那我在这里做错了什么?我已将我的.h文件包含在运算符<<我打算和全班同学。
#include <iostream>
using namespace std;
class fun
{
private:
int a;
int b;
int c;
public:
fun(int a, int b);
void my_swap();
int a_func();
void print();
friend ostream& operator<<(ostream& out, const fun& fun);
};
ostream& operator<<(ostream& out, fun& fun)
{
out << "a= " << fun.a << ", b= " << fun.b << std::endl;
return out;
}
答案 0 :(得分:13)
在这里......
ostream& operator<<(ostream& out, fun& fun)
{
out << "a= " << fun.a << ", b= " << fun.b << std::endl;
return out;
}
你需要
ostream& operator<<(ostream& out, const fun& fun)
{
out << "a= " << fun.a << ", b= " << fun.b << std::endl;
return out;
}
(我已经多次被咬了一下;运算符重载的定义与声明不完全匹配,所以它被认为是一个不同的函数。)
答案 1 :(得分:5)
签名不匹配。您的非会员功能很有趣有趣的是,这位朋友宣称自己很开心。乐趣。
答案 2 :(得分:0)
您可以通过在类定义中编写友元函数定义来避免这些错误:
class fun
{
//...
friend ostream& operator<<(ostream& out, const fun& f)
{
out << "a= " << f.a << ", b= " << f.b << std::endl;
return out;
}
};
缺点是每次调用operator<<
都会内联,这可能导致代码膨胀。
(另请注意,该参数不能称为fun
,因为该名称已经表示类型。)