【发布时间】:2017-09-04 10:04:29
【问题描述】:
我在命名空间中有一个类,如下所示。 test.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);
};
test.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
如何克服这些错误?
【问题讨论】:
-
也许问题是流的名称,在cpp中你写了str和头文件流。你也试过把朋友放在cpp中吗?
-
@Serizba:不,您甚至可以删除名称
stream并仅按类型保留定义。
标签: c++ compiler-errors namespaces operator-overloading friend-function