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