【发布时间】:2011-01-08 16:09:34
【问题描述】:
我收到的链接器错误提示我没有使用 #ifndef 和 #define。
1>TGALoader.obj:错误 LNK2005: “结构 TGA tga” (?tga@@3UTGA@@A) 已在 main.obj 中定义 1>TGALoader.obj:错误 LNK2005: “结构 TGAHeader tgaheader” (?tgaheader@@3UTGAHeader@@A) 已经 在 main.obj 1>TGALoader.obj 中定义: 错误 LNK2005:“无符号字符 * uTGAcompare" (?uTGAcompare@@3PAEA) 已在 main.obj 中定义 1>TGALoader.obj:错误 LNK2005: “无符号字符 * cTGAcompare” (?cTGAcompare@@3PAEA) 已定义 在 main.obj 1>LINK 中:警告 LNK4098: defaultlib 'LIBCMTD' 与 使用其他库;采用 /NODEFAULTLIB:库
我已将 nehe opengl 教程中的头文件 Texture.h 和 tga.h 包含到我的 项目。我有
#ifndef TGAISCOOL
#define TGAISCOOL
#endif
在我的 tga.h 文件中。如果我不止一次包含这个,我会从上面粘贴的链接器中得到错误。前两个来自 texture.h,虽然情况是一样的。
有什么想法吗?
【问题讨论】:
-
链接器错误与
#ifndef无关。标头保护仅在编译时防止重新定义冲突,即每个翻译单元。这个问题完全不同!
标签: c++ visual-studio-2008 linker linker-errors