错误:"成员"在此上下文中是私有的 - 命名空间

error: 'member' is private within this context - namespace

本文关键字:命名空间 上下文 成员 错误      更新时间:2023-10-16

>我在命名空间中有一个类,如下所示。测试.h

#include <iostream>
using std::cout;
namespace n1
{
    class myClass;
}
class n1::myClass
{
public:
    myClass(int na, int nb):a(na), b(nb){}
private:
    int a;
    int b;
friend std::ostream& operator << (std::ostream & stream, const n1::myClass& cls);
};

测试.cpp

#include "test.h"
std::ostream& operator << (std::ostream & str, const n1::myClass& cls)
{
    str << cls.a << " " << cls.b << std::endl;
}

在编译时,我收到以下错误。

test.h: In function ‘std::ostream& operator<<(std::ostream&, const n1::myClass&)’:
test.h:13:6: error: ‘int n1::myClass::a’ is private
test.cpp:5:13: error: within this context
test.h:14:6: error: ‘int n1::myClass::b’ is private
test.cpp:5:29: error: within this context

如何克服错误?

您可以在定义myClass的命名空间中定义运算符<<

namespace n1
{
 std::ostream& operator << (std::ostream & str, const myClass& cls)
 {
    str << cls.a << " " << cls.b << std::endl;
 }
}

因为你答应myClass在命名空间n1有一个朋友,但你实际上在全局命名空间中声明了运算符。