请问这是什么错误?

来源:百度知道 编辑:UC知道 时间:2024/05/14 06:04:07
我用vc++6.0编译程序想得到一个dll文件时产生一下错误:
--------------------Configuration: Strategy - Win32 Debug--------------------
Compiling...
Strategy.cpp
Linking...
Creating library Debug/Strategy.lib and object Debug/Strategy.exp
Strategy.obj : error LNK2001: unresolved external symbol "void __cdecl role(struct Environment *)" (?role@@YAXPAUEnvironment@@@Z)
Debug/Strategy.dll : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

Strategy.dll - 1 error(s), 0 warning(s)

首先肯定是函数 void role(struct Environment *)的问题
最通常的情况是:函数role在某个类中有了申明,但是没有在类的外面写出完整的函数定义。一般是程序员忘记写了,或者函数名的大小写不一致,或者函数参数不一致。

顺便说一下,这是程序链接时出错。程序编译(Build)分为两个步骤: 编译(Compile)和链接(Link),在Compile过程中,将每个Cpp文件编译为obj文件,在这个过程中,如果发现函数调用,只要这个函数有申明,无论是否有完整的定义,就能通过编译,第二步Link时,将多个obj文件连接成exe或dll文件,这时会将所有的函数申明和函数完整定义一一对应,一个函数可以有多次函数原形的申明,但是只能有一次完整的定义,如果没有函数定义,就会引发上面的错误。