2011-11-17 34 views
12

Sé que ha visto 21728517 personas que pidieron ayuda con esta, pero después de buscar y leer sobre esto, realmente no puedo entender esto. Conozco este error, lo he visto antes, sin embargo, esta vez, parece que no puedo evitarlo.LNK2005 (ya está definido)

También he intentado esto checklist.

Por lo tanto, los errores:

Error 25 error LNK2005: "void __cdecl checkStatus(unsigned int &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) already defined in DollarRecognizer.obj C:\Users\Rui Teixeira\Desktop\Current\Tese\SVN\TIFEE_Empty\TIFEE_Empty\main.obj TIFEE_Empty 

Error 26 error LNK2005: "void __cdecl depth2rgb(unsigned short const *,unsigned short *,char *,int,int)" ([email protected]@[email protected]) already defined in DollarRecognizer.obj C:\Users\Rui Teixeira\Desktop\Current\Tese\SVN\TIFEE_Empty\TIFEE_Empty\main.obj TIFEE_Empty 

Error 27 error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl explode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char)" ([email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) already defined in DollarRecognizer.obj C:\Users\Rui Teixeira\Desktop\Current\Tese\SVN\TIFEE_Empty\TIFEE_Empty\main.obj TIFEE_Empty 

Por lo tanto, la cuestión es que éstas son funciones definidas en "misc.h" con el buen #endif #ifndef #define. No están definidos en otra parte, pero aún recibo el LNK2005 de la muerte. ¿Qué estoy haciendo mal?

Gracias de antemano.

+5

#incluyendo el archivo .h en más de un archivo .cpp desencadenaría este error de enlazador. Debería haber solo * una * definición. Puedes poner * inline * delante de él. –

Respuesta

21

Define las funciones en misc.cpp, en lugar de en misc.h.

El problema probablemente se debe a #include ing misc.h en varios archivos CPP. las protecciones del encabezado evitan que un encabezado se incluya múltiples veces en la misma unidad de traducción, pero cada archivo CPP es (típicamente) una unidad de traducción separada. Entonces esas funciones terminan definiéndose dos veces, una en cada unidad de traducción.

+0

bueno, eso fue tonto de mi parte. Lo tenía antes .cpp por separado. Debo haberlo cambiado. gracias :) – takecare