C++重载<<运算符访问类私有成员报declared private here错误求助
问题原因
- 核心问题是友元函数签名不匹配:类内声明的
operator<<友元函数第二个参数为无const修饰的List&,但你实际实现的重载运算符第二个参数是带const修饰的const List&,二者属于完全不同的函数,因此你编写的实现版本并没有获得List类的友元访问权限,无法访问类的私有成员Node结构体和first指针,触发编译报错。 - 输出操作本身不会修改List对象,给参数加const符合const正确性要求,属于合理写法,不建议去掉实现中的const修饰。
修复方案
仅需修改List类内的友元声明,和实现的签名保持一致即可:
// 将类中原来的友元声明替换为如下代码 friend ostream& operator<<(ostream& out, const List& c);
可选优化建议
你当前的实现代码中,if分支没有加大括号,只有紧邻的out << cursor -> data;会受if条件控制,后续的out << " ";无论条件是否成立都会执行,虽然当前逻辑不会出错,但可读性较差,建议调整为:
if (cursor != NULL) { out << cursor -> data; out << " "; }
内容的提问来源于stack exchange,提问作者user486543
相关产品推荐
相关产品推荐

