C/Visual C - Error al Linkar. Ayuda!!!!!!!

 
Vista:

Error al Linkar. Ayuda!!!!!!!

Publicado por Toñi (20 intervenciones) el 19/03/2001 05:52:46
Hola, he creedo un fichero .h con 7 variables para tratarlas como globales y pueda acceder a ellas desde distintos formularios, pero cuando pongo este fichero como include en 2 .cpp me da este error de Linkado:

TRAINER.obj : error LNK2005: "float FactorConvergencia" (?FactorConvergencia@@3MA) already defined in AVANCED_OPTIONS.obj

Debug/VoiceRecognizer.exe : fatal error LNK1169: one or more multiply defined symbols found

Me podeis ayudar, ¿Por que se produce este error?¿Como puedo arreglarlo?

Gracias
Toñi
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error al Linkar. Ayuda!!!!!!!

Publicado por claudio (37 intervenciones) el 19/03/2001 07:43:21
Es porque estás definiendo la misma variable dos veces.
para solucionarlo tenes que manejar las directivas de compilación #ifdef, #ifndef, etc. algo así:

#ifndef MiHeader
#define MiHeader
int iMiVariable;
#endif

Lo que hace es agregarte la definición de la variable si no se ha definido previamente, usando la definición de MiHeader como si fuera una bandera.
Se entiende??? Cualquier cosa mandame un mail.
Espero haber ayudado :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error al Linkar. Ayuda!!!!!!!

Publicado por Googol (255 intervenciones) el 19/03/2001 10:30:45
Yo creo que así tampoco funciona... ¿no?
Eso evitaría la inclusión repetida del .h en el mismo .cpp si el .h es incluido en algún otro .h del mismo .cpp (¡¡joder qué lío!! :-) )
Pero no soluciona el problema entre distintos .cpp
Mi solución es utilizar la directiva extern.
El .h con las variables locales tendría otro .cpp asociado:

VariablesGlobales.h
-------------------------------
#ifndef VariablesGlobales_h
#define VariablesGlobales_h

// "Definimos" las variables globales. Realmente se especifica que
// existen, pero no están declaradas en el .h, es decir no se reserva
// espacio para ellas. Eso se hará en el .cpp correspondiente.
extern int variable1;
extern int variable2;
// ...

#endif

VariablesGlobales.cpp
-----------------------------------

// Otro fichero para el proyecto, en el que se declaran las variables,
// reservando ahora sí hueco para ellas.
int variable1;
int variable2;
// ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar