【问题标题】:Getting LINK error : Extern in C++. How to access the value of a variable which is modified in File A.CPP in another file File B.CPP获取 LINK 错误:C++ 中的外部。如何在另一个文件 File B.CPP 中访问在文件 A.CPP 中修改的变量的值
【发布时间】:2023-08-15 08:06:01
【问题描述】:

在我的 C++ 代码中,我想在文件“B”中使用变量“VarX”,该变量实际上在另一个文件“A”中进行了修改。 所以我看了一下@以下链接并使用了外部概念。

How do I use extern to share variables between source files?

错误 LNK2005: "unsigned int VarX" (?VarX@@3IA) 已在 ***.obj.

我的场景如下:

File1.h
extern unsigned int VarX;

File2.cpp
#include File1.h
unsigned int VarX = 101;

File3.cpp
#include File1.h
unsigned int temp = VarX;

IMP 注意:在头文件 File1.h 中,除了 Extern 定义之外,还有许多其他结构定义和许多其他定义。

有人可以帮助我吗?我该如何读取在另一个文件 File3.cpp 中的 File2.cpp 中修改的 VarX 的值。

【问题讨论】:

    标签: c++ visual-c++ linker-errors extern


    【解决方案1】:

    问题不在于可访问性,而在于多重定义。错误消息很清楚,在您重新定义 VarX 的代码中的某处。

    常见的原因可能是:

    • 无效的构建 - 您在编译之前是否清理过构建?
    • 您有多个unsigned int VarX = 101;unsigned int VarX; 某处(在头文件或实现文件中),没有extern 声明。
    • #include "File2.cpp"在代码的某个地方,导致它被编译多次。

    我赌的是第二种可能性。

    【讨论】:

    • 是的,我删除了多个声明。在查看@* 链接“*.com/questions/1433204/…”之一后,我已经多次声明。现在我删除了多个声明。但我仍然收到相同的 LINK 错误。 :(
    • 是的,我确实清理了整个解决方案并重建了整个解决方案。但仍然出现相同的链接错误。
    • 非常感谢您在此修复此问题的方向上的任何输入或指针 :) 提前谢谢您。
    • 这个 ***.obj 是 CPP 源文件的名称,其中 #include 这个头文件 File1.h 我在其中声明了我的外部变量。
    • In *** .obj "***" 是所有 CPP 源文件的占位符,其中 #include 具有外部定义的头文件 File1.h。