BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #32527同步于 2009/12/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]一个关于友元函数不能访问私有成员的问题

a634332123
2009/12/2镜像同步2 回复
头文件array.h #ifndef ARRAY_H #define ARRAY_H #include<iostream> using namespace std; class array{ friend ostream& operator<<(ostream&,const array&); friend istream& operator>>(istream&,array&); public: array(int=0); array(const array&); ~array(); int getsize()const; const array& operator=(const array&); bool operator==(const array&)const; bool operator!=(const array &right)const { return !(*this==right); } int &operator[](int); const int &operator[](int)const; private: int size; int*ptr; }; #endif 成员定义array.cpp #include<iostream> using namespace std; #include<iomanip> using namespace std; #include<new> #include<cstdlib> #include"array.h" array::array(int arraysize) { size=(arraysize>0?arraysize:10); ptr= new int[size]; for(int i=0;i<size;i++) ptr[i]=0; } array::array(const array& arraytocopy) :size(arraytocopy.size) { ptr=new int[size]; for(int i=0;i<size;i++) ptr[i]=arraytocopy.ptr[i]; } array::~array() { delete []ptr; } int array::getsize() const { return size; } const array& array::operator=(const array &right) { if(&right!=this){ if(size!=right.size){ delete []ptr; size=right.size; ptr=new int[size]; } for(int i=0;i<size;i++) ptr[i]=right.ptr[i]; } return *this; } bool array::operator==(const array &right)const { if(size!=right.size) return false; for(int i=0;i<size;i++) if(ptr[i]!=right.ptr[i]) return false; return true; } int &array::operator[](int subscript) { if(subscript<0||subscript>=size) { cout<<"\nerror:subscript"<<subscript <<"out of rang" <<endl; exit(1); } return ptr[subscript]; } const int &array::operator[](int subscript)const { if(subscript<0||subscript>=size) { cout<<"\nerror:subscript"<<subscript <<"out of rang" <<endl; exit(1); } return ptr[subscript]; } istream& operator>>(istream &input,array &a) { for(int i=0;i<a.size;i++) input>>a.ptr[i];//友元函数居然不能访问PRIVATE 成员 return input; } ostream& operator<<(ostream &output,const array &a) { int i; for(i=0;i<a.size;i++) { output<<setw(12)<<a.ptr[i];];//友元函数居然不能访问PRIVATE 成员 if((i+1)%4==0) output<<endl; } if(i%4!=0) output<<endl; return output; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
epavel机器人#1 · 2009/12/2
output<<setw(12)<<a.ptr[i];];//友元函数居然不能访问PRIVATE 成员 改为: output<<setw(12)<<a.ptr[i]; g++ 4.4编译执行通过,没问题~ 最近老见到这种改错贴……如果能仔细看编译信息这些错误应该能找出来的……
macrox机器人#2 · 2009/12/2
如果你用vc 6.0你要把定义给 放在类体内 我相信 楼上说的 你是笔误