C++错误,我解决不了,友元函数访问不了所在声明类的私有变量C/C++ code#includeiostreamusing namespace
C++错误,我解决不了,友元函数访问不了所在声明类的私有变量
C/C++ code#include<iostream>using namespace std;class test{private: int i; float f; char ch;public: test(int a=0, float b=0, char c='\0') { i = a; f = b; ch = c; } friend ostream& operator<<(ostream &, test); friend istream& operator>>(istream &, test &);};ostream& operator<<(ostream &stream, test obj){ stream << obj.i << ","; stream << obj.f << ","; stream << obj.ch << endl; return stream;}istream& operator>>(istream &t_stream, test &obj){ t_stream >> obj.i; t_stream >> obj.f; t_stream >> obj.ch; return t_stream;}void main(){ test A(45, 8.5, 'W'); operator<<(cout, A); test B, C; cout << "Input as i f ch:"; operator>>(cin, B); operator>>(cin, C); operator<<(cout, B); operator<<(cout, C);}
书上的代码
上机环境VC6
错误信息:
--------------------Configuration: exp9.2 - Win32 Debug--------------------
Compiling...
exp9.2.cpp
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(23) : error C2248: 'i' : cannot access private member declared in class 'test'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(7) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(24) : error C2248: 'f' : cannot access private member declared in class 'test'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(8) : see declaration of 'f'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(25) : error C2248: 'ch' : cannot access private member declared in class 'test'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(9) : see declaration of 'ch'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(31) : error C2248: 'i' : cannot access private member declared in class 'test'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(7) : see declaration of 'i'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(32) : error C2248: 'f' : cannot access private member declared in class 'test'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(8) : see declaration of 'f'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(33) : error C2248: 'ch' : cannot access private member declared in class 'test'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(9) : see declaration of 'ch'
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(40) : error C2668: '<<' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(43) : error C2668: '>>' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(44) : error C2668: '>>' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(45) : error C2668: '<<' : ambiguous call to overloaded function
C:\Documents and Settings\Administrator\桌面\project\C++ cood form book\chap9\exp9.2.cpp(46) : error C2668: '<<' : ambiguous call to overloaded function
Error executing cl.exe.
------解决方案--------------------
VC6.0对友元支持不太好,换个编译器。
[解决办法]
提供 方法来访问 类的成员变量
如 int getI() const { return i; }
或者直接开放权限
对于部分简单的类 变量成为public是可以的
[解决办法]
换个编译器呗