我有一个头文件:headerFiles.h,其中包含以下extern变量:
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 < / p>
但是当我在Helper.cpp文件中引用extern变量时,编译器给出以下链接错误:
错误LNK2001无法解析的外部符号“ char * err_msg” (?err_msg @@ 3PADA)
我认为可以通过命令行进行编译,但是我想知道如何使用Visual C ++进行编译。我有VC ++ 2017 Community Edition。 请帮忙。
答案 0 :(得分:4)
来自here:
仅在变量和函数的声明中允许使用extern说明符(类成员或函数参数除外)。它指定外部链接,并且从技术上讲不会影响存储持续时间,但是不能在自动存储持续时间对象的定义中使用它,因此所有外部对象都具有静态或线程持续时间。另外,使用extern并且没有初始化程序的变量声明也不是定义。
换句话说,您的代码仅声明某个位置定义了err_msg
(及其他)变量(!),并依靠链接器知道它的位置。
这就是为什么当找不到所需名称时出现链接器错误的原因。
一种可能的解决方案是定义:
char *err_msg;
char recvbuf[DEFAULT_BUFLEN];
char sendbuf[DEFAULT_BUFLEN];
在项目中的一个* .cpp文件中(只有一个)。