C/Visual C - Variables Globales c++

 
Vista:

Variables Globales c++

Publicado por harold puentes (12 intervenciones) el 25/10/2007 21:33:44
Buen dia maestros del c++

Estoy realizando una solucion utilizando el api de wxwidgets ( ya lo he usado antes ), pero resulta que me surgio utilizar una variable global y tengo problemas al momento que se realiza el linker de las librerias, el error es "multiple definicion de la varibla MyVar " . .. haciendo un ejemplo sencillo en c++ ( VC++ o GNU , gcc , MinGW ) para que ustedes puedan replicar lo que me pasa seria de la siquiente manera:

-----------------------main.cpp-----------------------------
#include "Myheader1.h"

int main(){


MyVar = 5;
return 0;
}

---------------------Myheader1.h---------------------------
#ifndef __MYHEADER1__
#define __MYHEADER1__

#include "Myheader2.h"

void MyFunc1();

#endif // __MYHEADER1__
---------------------Myheader1.cpp---------------------------
#include "Myheader1.h"

void MyFunc1(){

//sin nada
}

---------------------Myheader2.h---------------------------

#ifndef __MYHEADER2__
#define __MYHEADER2__

int MyVar;

void MyFunc2();

#endif // __MYHEADER2__

---------------------Myheader2.cpp---------------------------
#include "Myheader2.h"

void MyFunc2(){

//sin nada
}

------------------------------------------------------------

Tambien sale el error si colocara el include del Myheader2.h en los dos .cpp

Si alguno de ustedes me puede sugerir como usar una variable global ( claro, sin usar extern ) en c++ le agradeceria ,

saludos

Gracias
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:Variables Globales c++

Publicado por fernando.gomez (1603 intervenciones) el 25/10/2007 21:41:31
La declaración de la variable no la puedes colocar en un header, por obvias razones (definición de #include). Entonces lo que tienes que hacer es crearla en algún cpp, y en los otros que utilices, declaras la misma variable pero como extern. Esto inclusive lo puedes hacer en un header.

---header1.h

void foo();

--header2.h

void goo();

--source1.cpp

#include "header1.h"

int global;

void foo()
{
cout << global << endl;
}

--source2.cpp

extern int global;

void goo()
{
cout << global << endl;
}

Saludos.
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:Variables Globales c++

Publicado por fernando.gomez (1603 intervenciones) el 26/10/2007 00:31:30
Por cierto, considera usar clases Singleton en lugar de variables globales.

http://kithkanan-programacionencpp.blogspot.com/2007/07/diseo-avanzado-clases-singleton.html

Saludos.
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:Variables Globales c++

Publicado por harold (12 intervenciones) el 26/10/2007 14:25:46
Muchisimas gracias la primer respuesta fue la precisa para lo que nesecitaba , declare dentro de un cpp int Myvar en un .h extern int Myvar y ya tenia accesoa ella desde cualquier parte del programa obiamente haciendo la inclucion de .h dode esta el extern. Y lo de las clases singleton muy bueno bastante propio

Gracias
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