在全局头文件中声明全局?

Ube*_*per 4 c++

我有一个头文件,比如说Common.h,它包含在几个项目的所有文件中.基本上我想声明一个全局变量,例如:

class MemoryManager;
DLL_EXPORT MemoryManager* gMemoryManager;
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到了大量的链接器错误

类MemoryManager*gMemoryManager已经定义.

:(?

小智 10

因为它是在每个编译文件中创建变量的单独副本.然后这些在连接阶段发生碰撞.请记住,预处理器会读入所有头文件,并在所有头文件中生成一个大文件.所以每次编译这个大文件时,gMemoryManager都会创建另一个相同的副本.

您需要extern在一个非头文件中使用和定义它.

在您的头文件中

extern DLL_EXPORT MemoryManager* gMemoryManager;
Run Code Online (Sandbox Code Playgroud)

在您的一个C++文件中

DLL_EXPORT MemoryManager * gMemoryManager;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我不知道DLL_EXPORT做了什么,我只是假设它需要进入两个地方.