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

#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方法编译没有问题。

我不确定我在这里缺少什么- friend 功能不应该能够访问test类的私有(private)成员吗?

最佳答案

您还需要在 namespace 下定义这些功能。执行此操作时,可以从test中省略 namespace 的名称。

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;
  }
}

关于c++ - friend 功能仍无法访问私有(private)成员(member),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50934065/

10-14 11:19
查看更多