繁体   English   中英

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

[英]Friend function still can't access private member

我有一个简单的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方法编译没有问题。

我不确定我在这里缺少什么-朋友功能不能访问类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;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM