【问题标题】:How to use a static member-struct in multiple source files? [closed]如何在多个源文件中使用静态成员结构? [关闭]
【发布时间】:2020-03-25 15:40:31
【问题描述】:

我需要在多个源文件中使用一个结构,它是我的类的静态成员。这是一个精简的示例:

头文件

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。只有一个。你想达到什么目的? Does anyone know how to make this work - 让什么工作,究竟是什么? can be used 您可以从 Source File 2 中删除 Foo::Bar Foo::bar; 并仍然在其中使用 Foo::bar
  • @user4581301 这是我的一个简单的误解。感谢您的澄清。

标签: c++ gcc struct static-members


【解决方案1】:

单一定义规则也适用于静态数据成员。应该只有 一个 形式的定义

Foo::Bar Foo::bar;

您可以选择将其放入哪个翻译单元(.cpp 文件),但您必须将其放入准确的一个中。

这与Foo::bar 是否可以在给定的翻译单元中使用 无关。为此,包含在头文件中的声明就足够了。

【讨论】:

    猜你喜欢
    • 2013-02-05
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2019-04-15
    相关资源
    最近更新 更多