关于重载和友元函数问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 14:15:05
我用VC6.0 SP6编程。
类声明里有
friend ostream &operator<<(ostream &,const CDate&);
这句。
函数定义为
ostream operator<<(ostream &output,const CDate &d)
{
output<<d.year<<"-"<<d.month<<"-"<<d.day;
return output;
}
编译时出现
--------------------Configuration: date - Win32 Debug--------------------
Compiling...
date.cpp
D:\my cpp programe\date\date.cpp(134) : error C2248: 'year' : cannot access private member declared in class 'CDate'
D:\my cpp programe\date\date.cpp(22) : see declaration of 'year'
D:\my cpp programe\date\date.cpp(134) : error C2248: 'month' : cannot access private member declared in class 'CDate'
D:\my cpp programe\date\date.cpp(23) : see declaration of 'month'
D:\my cpp programe\date\date.cpp(134) : error C2248: '

ostream operator<<(ostream &output,const CDate &d)
改为ostream &operator<<(ostream &output,const CDate &d)
你必须与你声明的一样写法嘛.
你的year,day要声明为保护类型....才行..

ostream operator<<(ostream &output,const CDate &d)

差个&号,原形和定义不同,编译器以为你要重载全局范围内的CData输出,当然不让你访问类的私有成员了...