定义类的静态成员另一个命名空间内

问题描述:

如果我有一个命名空间中的私人静态成员类:定义类的静态成员另一个命名空间内

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'

我看过关于静态私人成员的其他答案,以及需要在类声明的哪个位置声明它们,这是我相信我在这里做的,但错误仍然逃脱我。

+0

'namespace {'是匿名的。定义为声明是在'namespace A'中提出的,它不能在那里完成。 –

我已经看过关于静态私有成员和需要申报他们在类的声明,这是什么,我相信我在这里做什么其他的答案,

不,你不这样做。如果声明位于“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文件,而不是在单元测试文件。