错误:在第三个库中定义extern变量时…的多重定义

问题描述 投票:0回答:1

我有三个图书馆:

第一个(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"

当编译主程序时,出现提到的错误。

这里是什么问题?

c++ libraries extern
1个回答
1
投票

[当int a;中存在Lib3.h时,那么每个包含Lib3.h的翻译单元(直接或间接)将获得其自己的a副本,因此会出现错误。就像在a中一样,需要在Lib3.h中将extern声明为Lib.h,然后需要在其他地方的int a;文件中定义实际的.cpp变量(Lib2.cpp就足够了),因此只有a的所有副本均引用1个副本。

© www.soinside.com 2019 - 2024. All rights reserved.