error: multiple definition of... when defining an extern variable in a third library

error: multiple definition of... when defining an extern variable in a third library

我有三个图书馆:

第一个 (Lib.h) 声明了一个将在别处定义的变量:

extern int a;

第二个(Lib2.h)包括第三个:

#include "Lib3.h"

此库 (Lib2.cpp) 的 .cpp 文件除以下内容外不包含任何内容:

#include "Lib2.h"

而第三个(Lib3.h)终于包含了变量的定义:

int a;

主程序只包含第一库和第二库:

#include "Lib.h"
#include "Lib2.h"

编译主程序时,出现上述错误。

这里有什么问题?

int a; 存在于 Lib3.h 中时,每个包含 Lib3.h(直接或间接)的翻译单元都将获得自己的 a 副本,因此出现错误. a 需要在 Lib3.h 中声明为 extern,就像在 Lib.h 中一样,然后需要在 int a; 中定义实际的 int a; 变量=19=] 文件在别处(Lib2.cpp 就足够了)所以所有 extern 都引用了 a 的 1 个副本。