tags:

views:

162

answers:

5

I'm compiling some code that relies on include guards to prevent multiple definitions of objects and functions, but Visual Studio 2008 is giving me link errors that there are multiple definitions. I don't understand why because I've used code very similar to this before and it hasn't caused problems. I must be doing something dumb but I have no idea what it is. I also tried to take out the include guards and use #pragma once, but I get the same link errors. What should I check for?

+2  A: 

If they are linker errors, the most likely cause is probably non-inline functions defined in the header.

If you have a non-inline function in a header that is included in more than one source file, it will be defined in each of those source files ("translation units"), thus the function will be defined more than once, hence the multiple definitions error.

James McNellis
Yeah you're right...oops. Thanks!
Stewart
you can also make them weak symbols by making them templates
jk
A: 

If you're getting linker errors... are you sure you're not 1) actually defining a function twice in code or 2) trying to do something silly like #include a source file (as opposed to a header file)?

Adam Maras
A: 

This can also be caused by using different versions of the cstd lib from other library's linked in. Check under the c++/Code generation section and make sure all your projects are using the same settings.

rerun
A: 

i`m getting same problem but don no y pragma is working in some cacses and some cases not but inclusion guards are not working any way

dostekhob
A: 

i don no its maybe problem with visual stidio or compiler and i need to reinstall thos guys Haaa

dostekhob