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(); ...... };
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.
Hola compañeros ! He buscado y buscado acerca del error que poseo, y solo he logrado averiguarque es referente a la inicialización de variables y/o punteros, pero no he logrado corregirlo.
El error que poseo es el siguiente:
Código:
std::string::assign(std::string const&) ()
Según tiene que ver con la inicialización de mis clases, por lo que les dejo más o menos lo que poseo:
Código:
Account& account = *getContext().account; account.createCharacter(Professions::Bloodge, *getContext().textures); Character& character = account.getCharacter(account.getSlot()); character.setName(name); //<------ AQUÍ EL ERROR
Les explico como funciona:
'getContext.account' me regresa un puntero a un objeto Account. Este objeto YA FUE INICIALIZADO por lo que dicho puntero no debería tener fallos. 'account.createCharacter' crea un objeto Character nuevo en la cuenta. 'account.getCharacter' regresa una referencia a dicho personaje creado (la cuenta posee 3 Slots, por lo que se señala cual de los 3 personajes quiero obtener, con el getSlot, que devuelta el Slot actual en el cual estoy creando el personaje, para asegurarme de que obtenga el personaje recien creado, y no una referencia vacía u otro Character de los demás slots, evitando errores)
Guardo la referencia al personaje recién creado en la variable 'character'. Y luego procedo a asignarle un nombre. La variable 'name' contiene un string, no vacio (std::string name;)
Account.hpp
Código:
class Account { public: Account(); void createCharacter(Professions::ID id, const TextureHolder& textures); Character& getCharacter(int n); private: std::array<Character*, MAX_CHARACTERS> mCharacters; //array que contiene punteros a Character, de tamaño MAX_CHARACTERS int currentChars; int currentSlot; };
//Aquí señalo que inicialmente todos los punteros a objetos Character, serán punteros nulos, es decir, una cuenta sin personajes (Characters) mCharacters[0] = nullptr; mCharacters[1] = nullptr; mCharacters[2] = nullptr; }
void Account::createCharacter(Professions::ID id, const TextureHolder& textures) { //crea un nuevo personaje en un puntero std::unique_ptr<Character> newCharacter( new Character(id, textures));
//hace que el array apunte a este nuevo Character creado, para asi guardar el nuevo personaje en la cuenta //currentSlot es el Slot en donde estoy creando el personaje, la función getSlot utilizada arriba devuelve este valor. mCharacters[currentSlot] = newCharacter.get();
void Character::setName(std::string& name) //<------- Esta es la función que da el error { std::cout << "setName activada" << std::endl; mName = name; //<------- Esta es la linea del error std::cout << "Se dio el nombre con exito" << std::endl; //Obviamente esta linea no se imprime en la consola S: }
Es bastante código, pero el funcionamiento es super simple y fácil de entender, coloqué todo lo involucrado para que se entienda de donde puede provenir el error.
Espero que puedan ayudarme, estoy bastante desesperado, mucha gracias de antemano !
Hola ! Llevo 2 días intentando reparar un error, y creo que ya estoy muy cerca de lograrlo, pero ya no doy más, así que les pido ayuda.
Sucede que tengo los siguientes errores
Código:
|323|error: expected class-name before '(' token |323|error: expected '{' before '(' token |324|error: expected constructor, destructor, or type conversion before ',' token |324|error: expected constructor, destructor, or type conversion before '(' token
(El problema se presenta en la clase State, en la estructura Context, y en sus respectivos contructores, así que pueden ignorar el resto de las clases que desconozcan, las puse para que se entienda de qué trata el código.)
//Constructor de la estructura Context que está dentro de la clase State //Este contructor debería guardar referencias (o punteros) a los recursos obtenidos por argumento State::Context::Context(sf::RenderWindow& window, TextureHolder& textures, FontHolder& fonts, Player& player) //Lista de inicialización : State::Context::window(window) //Linea 323 , State::Context::textures(textures) //Linea 324 , State::Context::fonts(fonts) , State::Context::player(player) {
}
State::State(StateStack& stack, State::Context context) //Lista de inicialización 2, llama al constructor de Contexto : mContext(State::Context(*(context.window),*(context.textures),*(context.fonts),*(context.player))) {
}
Según lo que tengo entendido, la lista de inicialización del contructor de Context debería estar correcta, pero ambas en conjuntos me entra la duda. Podría alguien decirme donde está el error en las listas de inicialización, o si debo utilizar otra forma para resolver el problema?
struct Command { std::function<void([b]SceneNode[/b]&, sf::Time)> action; unsigned int category; };
Y si las escribo de esta forma en mi codigo, me da el siguiente error:
Código:
|157|error: 'Command' does not name a type|
Supuse que haciendo el orden contrario obtendría un error similar, así que declaré la estructura al inicio del código para señalarle al código que mi estructura si existía en algún lado. Entonces lo escribí de esta forma:
Acaso tambien debo declarar esta variable de mi estructura al comienzo del código? Si tuviera muchas variables deberái declararlas todas? Hay alguna otra solución.
Muchas gracias de antemano, espero que se haya entendido el problema.
Hola ! Estoy estudiándome un libro, y de repente me aparece una función del tipo como señalé más arriba como método de una clase.
Y ya me ha aparecido unas 3 veces, así que supongo que debe ser importante. Podría alguien decirme que significa el 'const' a la derecha de la declaración de la función, así como también aparece en su definición?
Quiero crear un juego aventura/rpg en 2D. Para ello, he aprendido C++ a fondo, anteriormente ya conocía python, por lo que tengo mucho conocimiento sobre programación y sobre como llevar a cabo un buen código (o al menos eso creo).
El juego que quiero crear quiero que sea similar al Ragnarok Battle Offline en lo que es gráfica:
Pero, donde puedo aprender a programar la animación?, los movimientos de personajes, efectos, todo lo que tiene que ver con gráfica en 2D? Tengo conocimiento de estructura de datos, string, I/O, vectores, etc, etc, todo lo que corresponde a programación en si en c++. Quiero aprender programación gráfica (quiero empezar con SFML). Pero tengo entendido que esta libreria solo me da herramientas para llevar a cabo la parte gráfica de mi juego, pero por ejemplo, cómo puedo aprender la forma correcta de ejercer una animación eficiente en mi juego (con animación me refiero, a que mi personaje tenga una imagen distinta para atacar, caminar, saltar, recibir daño, etc). Claro, es parte de lo que yo mismo debo aprender a programar como programador, de hecho, actualmente tengo muchas ideas en mi cabeza de como hacerlo, pero me gustaría algun documento que me enseñe la forma correcta, para partir bien desde el comienzo y poder ir complementándolo luego, evitando un mal código.