友元函数重载<<操作符的问题
类定义是这样:
class A
{
private:
struct Mlgb {
char * name;
int size;
};
Mlgb * m;
public:
A(const char *,int);
~A();
friend ostream & operator<<(ostream & os, const A & a);
};
实现其中的操作符重载:
ostream& operator<<(ostream& os, const A & a)
{
os << a.m->size;
return os;
}
编译的时候报错
error C2248: 'm' : cannot access private member declared in class 'A'
难道是实现的方法和原型定义不匹配?我把相同的代码直接放到原型定义的地方就没有问题,请各位指教...
[解决办法]
按照楼主的代码写了个小例子,编译通过
#include <iostream>using namespace std;class A{private: struct Mlgb { char * name; int size; }; Mlgb * m;public: A(const char *s,int i){m = new Mlgb();m->name = const_cast<char*>(s);m->size = i;}; ~A(){if(!m)delete m;} friend ostream & operator<<(ostream & os, const A & a);};ostream& operator<<(ostream& os, const A & a){ os <<a.m->name<<" "<<a.m->size; return os;}int main(){ A a("zzz",100); cout<<a<<endl; system("pause"); return 0;}
[解决办法]
vc6在同时处理std和friend,必然失败,所以只要是vc6,只能放弃了