外部变量未定义

Extern variable undefined

我遇到了外部变量声明的问题。我有一堆包含结构定义的 .cpp 文件:

const System SystemA = {"A", 1, 2 ...}; //In A.cpp
const System SystemB = {"B", 1, 2 ...}; //In B.cpp
...

这些 Cpp 文件只是作为添加新结构和轻松查找特定结构定义的一种简单方式提供给服务器。 (因为我可能有 100 个定义,每个定义都是多 [50] 行代码)。

当我尝试在另一个编译单元 (.cpp) 中使用它们时:

extern const System SystemA;
extern const System SystemB;
...

void InitStructs(){
    SystemA.Init();
    SystemB.Init();
    ...
}

我刚得到undefined reference to SystemAundefined reference to SystemB,等等。 我在做这个统一初始化,因为我是在每个system.cpp中做静态动态初始化的初始化。但这是有风险的,因为无法确保初始化顺序(静态初始化顺序失败)。因此,根据 cpp 编译顺序,我遇到了分段错误。

我转向了这种方法,但现在它甚至无法编译.... 有帮助吗?

SystemASystemB 也应该用 extern 关键字定义:

extern const System SystemA = {"A", 1, 2 ...}; //In A.cpp
extern const System SystemB = {"B", 1, 2 ...}; //In B.cpp

或者你可以制作一个 header 例如Globals.h,声明它们:

extern const System SystemA;
extern const System SystemB;

这样可以保证它们在包括 header 的所有编译单元中具有相同的链接。稍后,您可以在不使用 extern 关键字的情况下定义它们,因为 extern 声明已经可见:

A.cpp

#include "Globals.h"

const System SystemA = {"A", 1, 2 ...};

B.cpp

#include "Globals.h"

const System SystemB = {"B", 1, 2 ...};

在 C++ 中,全局范围内的 const 个对象默认也是 static,也就是说,它们在源文件之外是不可见的。要解决此问题,请将 extern 添加到每个定义中。