在另一个命名空间内定义静态类成员
Defining a static class member inside of another namespace
如果我在命名空间中有一个具有私有静态成员的类:
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...*/
我收到Clang:的错误
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文件中,而不是放在单元测试文件中。
相关文章:
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 是否通过单元化指针UB访问静态类成员
- 在子类中填充静态类成员
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- uninit_member:非静态类成员m_wszParams未在此构造函数中初始化,也不在它C++中调用的任何函数中初
- 说明通过指针访问非静态类成员函数
- 静态类成员的使用
- 静态类成员不是与 this 指针没有关联吗?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 如何在 Visual Studio 中显示模板的静态类成员
- 即使没有析构函数,非静态类成员也会被销毁吗?
- 静态模板函数访问静态类成员
- 长镜头 -- 可能有一个静态类成员,该类成员具有访问非静态成员的 lambda
- C 静态类成员未在 *静态库 *中初始化
- 在OpenMP中制作静态类成员螺纹
- 正在初始化初始化函数中的静态类成员
- 不推荐使用C++11中的静态类成员
- 我们可以在构造函数中定义静态类成员吗?
- 为什么静态类成员没有内存泄漏错误?
- 架构X86_64静态类成员的错误符号X86_64错误