在 C++ 中使用 Extern 变量进行编译
Compiling with Extern variable in C++
我有一个头文件:headerFiles.h 包含以下外部变量:
extern char *err_msg;
extern char recvbuf[DEFAULT_BUFLEN];
extern char sendbuf[DEFAULT_BUFLEN];
此头文件包含在:Helper.h 中,Helper.h 包含在 Helper.cpp 中,因此,
headerFiles.h --> 包含在 --> Helper.h --> 包含在 -- > Helper.cpp
但是当我在我的 Helper.cpp 文件中引用外部变量时,编译器给出了以下链接错误:
Error LNK2001 unresolved external symbol "char * err_msg"
(?err_msg@@3PADA)
我认为它可以通过命令行编译,但我想知道如何使用Visual C++编译它。我有 VC++ 2017 社区版。
请帮忙。
来自here:
The extern specifier is only allowed in the declarations of variables and functions (except class members or function parameters). It specifies external linkage, and does not technically affect storage duration, but it cannot be used in a definition of an automatic storage duration object, so all extern objects have static or thread durations. In addition, a variable declaration that uses extern and has no initializer is not a definition.
换句话说,您的代码只是声明在某处定义了 err_msg
(和其他)变量(!),依赖于链接器知道它在哪里。
这就是无法找到请求的名称时出现链接器错误的原因。
一个可能的解决方案是定义:
char *err_msg;
char recvbuf[DEFAULT_BUFLEN];
char sendbuf[DEFAULT_BUFLEN];
在您项目中的一个(且只有一个)*.cpp 文件中。
我有一个头文件:headerFiles.h 包含以下外部变量:
extern char *err_msg;
extern char recvbuf[DEFAULT_BUFLEN];
extern char sendbuf[DEFAULT_BUFLEN];
此头文件包含在:Helper.h 中,Helper.h 包含在 Helper.cpp 中,因此,
headerFiles.h --> 包含在 --> Helper.h --> 包含在 -- > Helper.cpp
但是当我在我的 Helper.cpp 文件中引用外部变量时,编译器给出了以下链接错误:
Error LNK2001 unresolved external symbol "char * err_msg" (?err_msg@@3PADA)
我认为它可以通过命令行编译,但我想知道如何使用Visual C++编译它。我有 VC++ 2017 社区版。 请帮忙。
来自here:
The extern specifier is only allowed in the declarations of variables and functions (except class members or function parameters). It specifies external linkage, and does not technically affect storage duration, but it cannot be used in a definition of an automatic storage duration object, so all extern objects have static or thread durations. In addition, a variable declaration that uses extern and has no initializer is not a definition.
换句话说,您的代码只是声明在某处定义了 err_msg
(和其他)变量(!),依赖于链接器知道它在哪里。
这就是无法找到请求的名称时出现链接器错误的原因。
一个可能的解决方案是定义:
char *err_msg;
char recvbuf[DEFAULT_BUFLEN];
char sendbuf[DEFAULT_BUFLEN];
在您项目中的一个(且只有一个)*.cpp 文件中。