C/Visual C - Lio con .h's: "already defined"

 
Vista:

Lio con .h's: "already defined"

Publicado por Eva (2 intervenciones) el 21/11/2005 12:22:29
Buenas soy nuevo en c++.
Tengo 2 dicheros cpp, con sus corresponedientes .h. Y aparte un fichero .h con constantes.
El fichero cpp 1, utiliza al fichero cpp 2, y los 2 ficheros cpp, utilizan el fichero .h de constantes. El problema es que como en los 2 ficheros cpp tengo puesto #include "constantes.h", me da este error al compilar:

[quote]
Generating Code...
Linking...
Recristalazation_CEIT.obj : error LNK2005: "double QGB" (?QGB@@3NA) already defined in Functions.obj
[/quote]
Con una linea por cada constante.

He buscado por ahí, y dicen que hay que poenr el fichero de constantes, así y lo he puesto del tipo
[code]
#ifndef _CONSTANTS_H_
#define _CONSTANTS_H_
// las definiciones
#endif
[/code]

Pero me sigue dando el mismo error. Alguien me puede decir como solucionarlo?
Graciassss
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
sin imagen de perfil

RE:Lio con .h's:

Publicado por chuidiang (73 intervenciones) el 22/11/2005 05:46:27
Hola:

Son dos problemas distintos.

Imagina que en ese fichero defines un tipo, por ejemplo

typedef struct {...campos...} MiEstructura;

En este caso sí se arregla con los #ifndef , #define, #endif que has puesto. Si la estructura ya está definida, no se define por segunda vez y listo. El error en este caso sería del compilador.

Tu error es del linker y se debe posiblemente a la variable global double QGB.
No es buena idea en general definir variables globales. Si no te queda más remedio, no es buena idea meterla en un .h. La mejor forma de hacerlo es definirla en uno solo de los .c (el que tu quieras) de esta forma

double QGB;

En los demás .c (o bien en el .h) no hay que definirla. Hay simplemente que indicar que se quiere usar y que ya está definida en otro .c. Eso se hace utilizando extern

extern double QGB.

Se bueno.
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