【问题标题】:error: multiple definition of... when defining an extern variable in a third library错误:在第三个库中定义外部变量时...的多重定义
【发布时间】:2020-05-06 15:51:03
【问题描述】:

我有三个库:

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

当我编译主程序时,我得到了提到的错误。

这里有什么问题?

【问题讨论】:

  • 你需要在cpp文件中定义变量,而不是头文件。
  • 为什么你的变量在头文件中?
  • 所以我应该制作一个 Lib3.cpp 文件并将行放在那里?
  • 是的。除非您正在处理模板,或者您使用 inline 关键字,否则所有定义都应该在 cpp 文件中。

标签: c++ libraries extern


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2022-01-03
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多