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:
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:
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.hppclass 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;
};
Account.cppAccount::Account()
{
currentChars = 0;
currentSlot = -1;
//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();
++currentChars;
}
Character& Account::getCharacter(int n)
{
std::cout << "n = " << n << std::endl;
// retorna un personaje de la cuenta (retorna una referencia)
return *mCharacters[n];
}
Character.hppclass Character:
{
public:
explicit Character(Professions::ID id, const TextureHolder& textures);
void setName(std::string& name);
std::string getName() const;
private:
std::string mName;
};
Character.cppCharacter::Character(Professions::ID id, const TextureHolder& textures)
{
}
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:
}
std::string Character::getName() const
{
return mName;
}
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 !