定义类的静态成员另一个命名空间内
问题描述:
如果我有一个命名空间中的私人静态成员类:定义类的静态成员另一个命名空间内
namespace A {
class T {
public:
//functions
private:
static bool a;
static unsigned int b;
而且我做这个类的单元测试中的其他文件,如:
namespace {
bool A::T::a = false;
unsigned int A::T::b = 1;
/* tests declaring an instance of A...*/
我收到错误从锵:
error: cannot define or redeclare 'a' here because namespace '' does not enclose namespace 'T'
error: cannot define or redeclare 'b' here because namespace '' does not enclose namespace 'T'
我看过关于静态私人成员的其他答案,以及需要在类声明的哪个位置声明它们,这是我相信我在这里做的,但错误仍然逃脱我。
答
我已经看过关于静态私有成员和需要申报他们在类的声明,这是什么,我相信我在这里做什么其他的答案,
不,你不这样做。如果声明位于“foo.h”中,则该定义应该位于“foo.cpp”中,而不是用于单元测试的文件中。
但错误仍然逃脱我。
namespace {
定义了一个匿名namespace
,这是从全球范围不同。在匿名namespace
中声明的名称仅在翻译单元中可见。任何在匿名namespace
中定义的东西都必须在该namespace
中声明。
您可以使用:
bool A::T::a = false;
unsigned int A::T::b = 1;
更妙的是,使用:
namespace A {
bool T::a = false;
unsigned int T::b = 1;
,并把这些代码行对应于.h文件.cpp文件,而不是在单元测试文件。
'namespace {'是匿名的。定义为声明是在'namespace A'中提出的,它不能在那里完成。 –