C++ 在匿名命名空间中定义友元方法
以下程序出现错误:C++ 在匿名命名空间中定义友元方法,c++,C++,以下程序出现错误: a.h namespace A { class TestA { private: int a = 1; protected: friend void printA(TestA); }; void printA(TestA ta); } a.cpp namespace A { namespace { // Works if this is removed. void printA(Te
a.h
namespace A {
class TestA {
private:
int a = 1;
protected:
friend void printA(TestA);
};
void printA(TestA ta);
}
a.cpp
namespace A {
namespace { // Works if this is removed.
void printA(TestA ta) {
std::cout << ta.a << std::endl;
}
}
}
我不明白为什么在附加的匿名名称空间中会出现这种情况。如果函数以前没有声明过,在类中声明它将把它放在周围的名称空间范围中(在您的示例中是
a
的范围)。实际上,您声明了A::printA
函数。通过将定义放在不同的范围(a中的匿名名称空间)使其成为不同的函数。
main.cpp: In function ‘void A::{anonymous}::printA(A::TestA)’:
main.cpp:29:25: error: ‘int A::TestA::a’ is private within this context