我使用的编译器位vs2015,尝试写一个sales_data类,定义了该类的输出函数,漏掉了friend关键字。代码如下:
ostream &operator<<(ostream &os,sales_data aaa) { os <<aaa.isbn()<<" "<<aaa.gxsl() <<" "<<aaa.gsj()<<" "<<aaa.gzj(); return os; }
产生错误:d:cpplearnc2015consoleapplication4consoleapplication4a.cpp(14): error C2804: 二进制“operator <<”的参数太多
1>d:cpplearnc2015consoleapplication4consoleapplication4a.cpp(14): error C2333: “sales_data::operator <<”: 函数声明中有错误;跳过函数体
1>d:cpplearnc2015consoleapplication4consoleapplication4a.cpp(40): error C2398: 元素“3”: 从“double”转换到“int”需要收缩转换
1>d:cpplearnc2015consoleapplication4consoleapplication4a.cpp(40): warning C4244: “参数”: 从“double”转换到“int”,可能丢失数据
加上关键字friend,编译器不报错。
友元为了可以访问其它类的私有成员,与上面错误很难联系,网上没有找到相应问题。谁能给点提示,谢谢各位。