I am getting linker errors that suggest I am not using #ifndef and #define.
1>TGALoader.obj : error LNK2005: "struct TGA tga" (?tga@@3UTGA@@A) already defined in main.obj 1>TGALoader.obj : error LNK2005: "struct TGAHeader tgaheader" (?tgaheader@@3UTGAHeader@@A) already defined in main.obj 1>TGALoader.obj : error LNK2005: "unsigned char * uTGAcompare" (?uTGAcompare@@3PAEA) already defined in main.obj 1>TGALoader.obj : error LNK2005: "unsigned char * cTGAcompare" (?cTGAcompare@@3PAEA) already defined in main.obj 1>LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
I have included a header file Texture.h and tga.h from the nehe opengl tutorials into my project. I have
#ifndef TGAISCOOL
#define TGAISCOOL
#endif
in my tga.h file. If I include this more than once, I get the errors from the linker that I pasted above. The first two are from texture.h though the situation is the same.
Any ideas on what is wrong?
You're not doing anything wrong. The problem is with the Tga.h file you got from NeHe. This header file defines four objects which means that if you include the file in different translation units the symbols for these will appear multiple times and that is what the linker is complaining about.
The solution is to move the definitions of these objects into the Tga.cpp file.
The lines in Tga.h that previously had the definitions should now read
extern TGAHeader tgaheader;
extern TGA tga;
extern GLubyte uTGAcompare[12];
extern GLubyte cTGAcompare[12];
with the original versions of these lines now in Tga.cpp
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With