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

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

2012-03-07 
友元函数重载操作符的问题类定义是这样:class A{private:struct Mlgb {char * nameint size}Mlgb * m

友元函数重载<<操作符的问题
类定义是这样:
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,只能放弃了

热点排行
Bad Request.