回 帖 发 新 帖 刷新版面

主题:C++中的不明连接错误

在VC6.0 中,经常会遇到连接错误,好不容易敲了一堆的代码,通过编译后,连接却出现问题了:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/PrioQueue.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

多数情况下是LINK 2001 的错误。

请问有经验的高手们,一般连接错误怎样定位和排除呢?我实在是找不到好的方法去对付连接错误。

回复列表 (共9个回复)

沙发

unresolved external symbol,无法找到外部符号。
意思就是某个变量/函数,你虽然给出了声明,但是没有给出定义。比如你写了一个extern int i, 但是没有在任何一个地方定义一个全局的int i;,则就会出现连接错误unresolved external symbol i

声明的意思就是“有一个东西叫做某某某,至于它在什么地方请你自己去找”。
定义的意思就是“有一个东西叫做某某某,它就放在这里,它是某某某某样子的”。
如果你需要使用某个东西,则一定要有定义。如果没有定义,则会出现上述错误。如果定义了多次,则会出现另一个连接错误。

关于WinMain:如果你认为你的程序是从main开始的,但是连接器却说“没有找到WinMain”,则说明你用VC建立工程的时候弄错了。
记得选Win32 Console Application(程序从main函数开始执行),而不是Win32 Application(程序从WinMain函数开始执行)。

板凳

可能是你跟我一样老师敲乱一个单词的字母顺序!
把主函数敲错了就会出现这种情况

3 楼

如下这样的连接错误又是什么原因呢?
test.obj : error LNK2001: unresolved external symbol "public: __thiscall BinaryTree<int>::~BinaryTree<int>(void)" (??1?$BinaryTree@H@@QAE@XZ)

4 楼


以前我的vc6.0不会出这样的错,但是打过sp5后就出错(好像是这样的),建议换个编译器

5 楼


可能就是软件的问题,只要知道怎么做就行了

6 楼

项目类型没选对,应是Win32 console 不是Win32 Application.

对于已经有的工程,简单的改法:
project->setting->link
查看link options.
其中/subsystem:windows 改为/subsystem:console

7 楼


我建立 的工程是 控制台应用程序,没建错啊!
主要是模板问题,如果用了模板类,连接时就会出现错误,如果不用模板类,就不会出现错误,这是为什么啊?

8 楼

[quote]如下这样的连接错误又是什么原因呢?
test.obj : error LNK2001: unresolved external symbol "public: __thiscall BinaryTree<int>::~BinaryTree<int>(void)" (??1?$BinaryTree@H@@QAE@XZ)
[/quote]

这种情况我也碰到过,我是这样解决的,看能不能帮到你,
在"工程属性"="C\C++"="运行时库"里,选择一个和你链接的库相同的属性值.
工程不同有异,所以你一个个试看能不能解决.

9 楼

希望不是你把模板类的定义 和 实现分开为两个文件,C++不支持模板定义和实现分开的,除非你是把实现放在main()那个文件中,连接是可以实现的

我来回复

您尚未登录,请登录后再回复。点此登录或注册