读书人

友元函数重载lt;lt;操作符的有关问题

发布时间: 2012-03-07 09:13:51 作者: rapoo

友元函数重载<<操作符的问题
类定义是这样:
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'
难道是实现的方法和原型定义不匹配?我把相同的代码直接放到原型定义的地方就没有问题,请各位指教...


[解决办法]
按照楼主的代码写了个小例子,编译通过

C/C++ code
#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,只能放弃了

读书人网 >C++

热点推荐