2024年3月14日发(作者:)

学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于

编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,

编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不

明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非

常困难。

初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:

unresolved external symbol “symbol”(不确定的外部“符号”)。

如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或

标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用

的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本

的连接库。

以下是可能产生LNK2001错误的原因:

一.由于编码错误导致的LNK2001。

1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如,

如果在C++ 源文件内声明了一变量“var1”,却试图在另一文件内以变量

“VAR1”访问该变量,将发生该错误。

2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定

义将导致LNK2001错误。

3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生

LNK2001。

4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。

5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。

静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问

任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。

函数内声明的变量(局部变量) 只能在该函数的范围内使用。

C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的