好友功能仍无法访问私人会员

Friend function still can't access private member

本文关键字:访问 功能 好友      更新时间:2023-10-16

>我有一个简单的C++类,我正在尝试添加流运算符,因此它可以与cout一起使用cin

#include <iostream>
namespace testing_namespace {
class test {
friend std::ostream &operator<<(std::ostream &os, const test &o);
friend std::istream &operator>>(std::istream &is, test &o);
public:
void doThing();
private:
int member;
};
}

这是实现文件:

std::ostream &operator<<(std::ostream &os, const testing_namespace::test &o) {
return os << o.member;
}
std::istream &operator>>(std::istream &is, testing_namespace::test &o) {
return is >> o.member;
}
void testing_namespace::test::doThing() {
std::cout << member << " thing" << std::endl;
}

我在编译时收到错误:

In function 'std::ostream& operator<<(std::ostream&, const testing_namespace::test&)':
test.cpp:8:20: error: 'int testing_namespace::test::member' is private within this context
return os << o.member;

operator>>也有类似的错误。doThing方法编译没有问题。

我不确定我在这里错过了什么 - 友元函数不应该能够访问类test的私人成员吗?

您还需要在命名空间下定义这些函数。执行此操作时,可以从test中省略命名空间的名称。

namespace testing_namespace 
{
std::ostream &operator<<(std::ostream &os, const test &o) {
return os << o.member;
}
std::istream &operator>>(std::istream &is, test &o) {
return is >> o.member;
}
}