首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++异常,小弟我解决不了,友元函数访问不了所在声明类的私有变量

2012-03-08 
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是可以的
[解决办法]
换个编译器呗

热点排行