我有三个图书馆:
第一个(Lib.h)声明将在其他地方定义的变量:
extern int a;
第二个(Lib2.h)包括第三个:
#include "Lib3.h"
此库的.cpp文件(Lib2.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;
文件中定义实际的.cpp
变量(Lib2.cpp
就足够了),因此只有a
的所有副本均引用1个副本。