elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con variable 'global'
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con variable 'global'  (Leído 1,362 veces)
xRodak

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Problema con variable 'global'
« en: 6 Febrero 2014, 18:52 pm »

Hola ! Tengo un pequeño problema con la utilización de cierta variable global, les comento lo que tengo y el error que poseo:

Quiero crear una variable 'mMonsterData' global, que sea modificada en la clase World, y que la clase Monster pueda tener accedo a esa información modificada de la variable.

Monster.hpp

struct MonsterData;

class Monster : public Entity
{
    public:
        Monster();
    ......
};

namespace
{
    std::map<Monster::ID, MonsterData*> mMonsterData;
}


DataTables.hpp

struct MonsterData
{
   int                 hitpoints;
   unsigned int                    Type;
   unsigned int                    Size;
   unsigned int                    Element;
};


World.hpp

...
#include <Monster.hpp>
...
...


World.cpp

...
mMonsterData = Value; //<-- Inicializo mi variable con ciertos valores
...

//Más tarde

Monster(spawn.id, mTextures); // Aquí el error. Ignoren los argumentos.


Monster.cpp

#include <Monster.hpp>
#include <DataTables.hpp>

Monster::Monster(Monster::ID id, const TextureHolder& textures) //Error en el contructor de Monster
: Entity(mMonsterData[id]->hitpoints)  //<-- ERROR: mMonsterData[id]->hitpoints, si cambio esta expresion por un int, el error se corrige.
, mSprite(textures.get(mMonsterData[id]->texture)) // También debería dar error aquí
{

}


El error reside en que, mi variable 'global' modificada en World.cpp, se modificó, pero solo es utilizable en World.cpp. Desde allí puede acceder a mMonsterData[id]->hitpoints u otras de sus variables sin ningún problema. Pero al momento de querer obtener sus datos en el constructor de Monster, la aplicación de cae. Esto es porque mMonsterData aún no es inicializada en este contexto (siendo que debería ser una variable global (?) ).

Ese es mi problema, alguien sabe donde está el error? Cómo puedo hacer que al modificar dicha variable en World.cpp, estos valores modificados puedan ser obtenidos en el Monster.cpp?

Estuve averiguando sobre variables globales, y la keyword 'extern', pero estuve otro tipo de errores haciéndolo de esa manera, así que vamos por parte, primero sus opiniones.

Muchas gracias por leer y también gracias de antemano.

Saludos cordiales.


En línea

blipi

Desconectado Desconectado

Mensajes: 25


Programador y hacker por devoción


Ver Perfil WWW
Re: Problema con variable 'global'
« Respuesta #1 en: 7 Febrero 2014, 00:12 am »

Dices que ya lo has probado, pero yo creo que será más sencillo usando `extern`.

Borras el namespace anónimo de Monster.hpp, y declaras la variables como:
extern std::map<Monster::ID, MonsterData*> mMonsterData;

Parece ser que el primer uso de mMonsterData lo haces en World.cpp, así que allí lo declaras:
std::map<Monster::ID, MonsterData*> mMonsterData;

Y debería funcionarte.


Que no te de error en la segunda línea donde comentas, es probablemente porque el compilador, tras encontrar el primer error, ya marca como incorrecta toda la inicialización y no sigue parseando.


En línea

xRodak

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Problema con variable 'global'
« Respuesta #2 en: 7 Febrero 2014, 01:23 am »

Muchisisisimas Gracias !

La verdad es que cambié un poco el sistema. Lo dejé un poco más ordenado. Declaré mi variable en otro hpp, y lo definí en blanco en su respectivo cpp. Haciendo esto obtenía el mismo problema, pero ahora quité el namespace indefinido y mágicamente funcionó. La verdad es que aún no entiendo porqué no funciona utilizando un namespace indefinido, pero al menos pude corregir el error.

Gracias por tu respuesta compañero, independientemente del origen del error, estoy contento de haber podido solucionarlo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SMF: $context variable global
PHP
[KMT] 4 2,601 Último mensaje 2 Enero 2008, 22:02 pm
por [KMT]
variable global
Programación Visual Basic
xexio 8 3,620 Último mensaje 4 Marzo 2010, 22:12 pm
por xexio
¿Que es preferible? Define o variable global
Programación C/C++
Komodo 4 2,707 Último mensaje 11 Septiembre 2010, 21:23 pm
por 16BITBoy
No se incrementa variable global enJavaScript
Desarrollo Web
Riki_89D 9 2,913 Último mensaje 27 Diciembre 2010, 14:52 pm
por Riki_89D
[solucionado] Declarar una variable global « 1 2 »
Programación Visual Basic
CAR3S? 17 8,274 Último mensaje 25 Abril 2011, 04:23 am
por CAR3S?
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines