C++ 如何在多个源文件中使用静态成员结构?
我需要在多个源文件中使用一个struct,它是类的静态成员。下面是一个精简的示例: 头文件C++ 如何在多个源文件中使用静态成员结构?,c++,gcc,struct,static-members,C++,Gcc,Struct,Static Members,我需要在多个源文件中使用一个struct,它是类的静态成员。下面是一个精简的示例: 头文件 namespace NS { class Foo { public: static struct Bar { bool test = false; uint32_t value; // uninitialized } bar; }; } 源文件1 #include "myHeader.hpp" using namespace NS; Foo:
namespace NS {
class Foo {
public:
static struct Bar {
bool test = false;
uint32_t value; // uninitialized
} bar;
};
}
源文件1
#include "myHeader.hpp"
using namespace NS;
Foo::Bar Foo::bar;
/* the rest of my first source file */
在我添加第二个源文件之前,这似乎没有任何问题
源文件2
#include "myHeader.hpp"
using namespace NS;
Foo::Bar Foo::bar;
/* the rest of my second source file */
在将结构添加到第二个源文件时,我得到一个“多定义”错误。是否有人知道如何实现这一点,以便在多个源文件中使用静态成员结构?一个定义规则也适用于静态数据成员。这个形式应该只有一个定义
Foo::Bar Foo::bar;
您可以选择将其放在哪个翻译单元(.cpp
文件)中,但必须将其正好放在其中一个单元中
这与给定翻译单元中是否可以使用
Foo::bar
无关。为此,包含在头文件中的声明就足够了。应该只需要在一个文件中定义Foo::bar
。链接器将处理其余部分。在多个源中定义对象毫无意义。只有一个对象Foo::bar
。只有一个。你想达到什么目标有人知道如何使这项工作
-确切地说,使什么工作可以使用
您可以删除Foo::Bar Foo::Bar代码>来自源文件2,但仍然在其中使用Foo::bar
。@user4581301这是我的一个简单误解。谢谢你的澄清。