39.109.127.190:windows 游戏编程大师技巧中 tidlib2 link的一个小问题。

来源:百度文库 编辑:高考问答 时间:2024/03/28 21:21:14
游戏初学《windows游戏编程大师技巧》在链接方面老有问题
该代码是原书463页的一个实例程序。讲的是一个可以在地图上走动的人。。

source 中已含:
demo9_1.cpp
t3dlib1.cpp
t3dlib2.cpp
t3dlib3.cpp

head 中已含:
t3dlib1.h
t3dlib2.h
t3dlib3.h

link input 中已含的library:
WinMM.lib
ddraw.lib
dsound.lib
dinput.lib
dsetup.lib
DXGuid.lib
dinput8.lib

ide: visual stdio 2005

达人。牛人都看看。。。小弟谢了。

error description:
------ Build started: Project: GameMaster, Configuration: Debug Win32 ------
Linking...
t3dlib2.obj : error LNK2005: "char * joyname" (?joyname@@3PADA) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct _GUID joystickGUID" (?joystickGUID@@3U_GUID@@A) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "unsigned char * keyboard_state" (?keyboard_state@@3PAEA) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct _DIMOUSESTATE mouse_state" (?mouse_state@@3U_DIMOUSESTATE@@A) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct DIJOYSTATE joy_state" (?joy_state@@3UDIJOYSTATE@@A) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct IDirectInput8A * lpdi" (?lpdi@@3PAUIDirectInput8A@@A) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct IDirectInputDevice8A * lpdikey" (?lpdikey@@3PAUIDirectInputDevice8A@@A) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct IDirectInputDevice8A * lpdimouse" (?lpdimouse@@3PAUIDirectInputDevice8A@@A) already defined in demo9_1.obj
t3dlib2.obj : error LNK2005: "struct IDirectInputDevice8A * lpdijoy" (?lpdijoy@@3PAUIDirectInputDevice8A@@A) already defined in demo9_1.obj
C:\Documents and Settings\沈诚玮\My Documents\Visual Studio 2005\Projects\GameMaster\Debug\GameMaster.exe : fatal error LNK1169: one or more multiply defined symbols found
Build log was saved at "file://c:\Documents and Settings\沈诚玮\My Documents\Visual Studio 2005\Projects\GameMaster\GameMaster\Debug\BuildLog.htm"
GameMaster - 10 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

应该是你在包含.H文件时, 有一些函数的定义什么的重复了.
原因可能是你在每一个.Cpp文件里都include了所有的.H文件.

仔细看看CPP文件对.H文件的需要, 不要重复包含有函数定义的.H文件.

如果.H里有函数定义的, 根据不同的.CPP文件包含时, 为函数声明加上extern关键字.