C++ 如何在多个源文件中使用静态成员结构?

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:

我需要在多个源文件中使用一个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::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这是我的一个简单误解。谢谢你的澄清。