【问题标题】:Extern in C++: For the extern VarX variable:: error LNK2001: unresolved external symbol "unsigned int VarX" (?VarX@@3IA)C++ 中的外部:对于外部 VarX 变量::错误 LNK2001:未解析的外部符号“unsigned int VarX”(?VarX@@3IA)
【发布时间】:2026-01-31 00:05:01
【问题描述】:

作为我之前在 * 中的问题的延续: 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 在我的 C++ 代码中,我想在文件“B”中使用变量“VarX”,该变量实际上在另一个文件“A”中被修改。 所以我看了一下@以下链接并使用了外部概念。

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

错误 LNK2001:无法解析的外部符号“unsigned int VarX" (?VarX@@3IA)

我的场景如下:

File1.h
extern unsigned int VarX;

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

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

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

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

【问题讨论】:

  • VarX = 101; 在 C++ 中作为声明或初始化无效。那是你的实际代码吗?

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


【解决方案1】:

你应该有 File1.cpp 内容如下:

unsigned int VarX = 0;

【讨论】:

    【解决方案2】:

    你必须在全局范围内定义VarX,我假设你现在没有这样做,否则它甚至不会编译:

    //File2.cpp
    #include "File1.h"
    unsigned int VarX = 101;  //this has to be outside any code block or namespace
                              //or class... 
    

    【讨论】:

    • 优秀。有效。 :) 非常感谢。 * 岩石。但是我有一个疑问。为什么我只需要在 File2.cpp 中声明 VarX 以及为什么我在 File3.cpp 中没有收到任何此类错误,而我正在使用之前在 File2.cpp 中分配的这个变量“VarX”。 ?你能解开我的疑惑吗?谢谢:)
    • @codeLover 因为这是一个定义规则的含义。您只定义一个变量一次,在您的情况下,File2.cppextern 声明仅表示“此变量在某处定义,您可以使用它。”
    • 好的,谢谢。我想你告诉我在所有函数、类等之外定义变量(在 File2.cpp 的全局范围内),因为它在头文件中被声明为 extern 并且我们想在其他文件中使用这个定义也。非常感谢您提供的信息:)