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 个副本。
我有三个图书馆:
第一个 (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 个副本。