c ++ ostringstream объект, вызывающий необработанное исключение после возврата основной функции

Unhandled exception at 0x53e83d80 in TestGame.exe: 0xC0000005: Access violation reading
location 0xfeeefef6.

Моя программа на C ++ выдает необработанное исключение при закрытии окна SFML (в результате чего основной класс возвращает 0;

Код, вызывающий это, является объектом std :: ostringstream, если я его не использую, проблема не возникает ..

void Orbs::UpdateText()
{
oss.str("");

oss << air_orbs.number;
air_orbs.text.setString(oss.str());
oss.str("");

oss.flush();

}

Заголовок класса:

#pragma once

#include <SFML/Graphics.hpp>
#include "FieldConst.h"#include <sstream>

int const ORB_CHAR_SIZE = 20;
float const ORB_SCALE_SIZE = 0.25f;

struct  Orb
{
sf::Texture texture;
sf::Sprite sprite;
int number;
sf::Text text;

void Add(){
number++;
}

void Remove(){
number--;
}
};

class Orbs
{
public:
Orbs();
~Orbs();
void Render(sf::RenderWindow &target);
void UpdateText();

private:
Orb air_orbs, darkness_orbs, death_orbs, earth_orbs, electricity_orbs,
fire_orbs, life_orbs, light_orbs, machine_orbs, metal_orbs, time_orbs,     water_orbs;

std::ostringstream oss;
};Player::Player()
{
Player::name = "Player1";

Player::deck = new Deck();
Player::voidZone = new Deck();

Player::hand = new Hand();

Player::orbs = new Orbs();
}

.
#pragma один раз

#include "IncludeCards.h"#include "Orbs.h"
class Player
{
public:
Player();
~Player();

std::string GetName();
Deck* GetDeck();
Hand* GetHand();
Deck* GetVoidZone();
Orbs* GetOrbs();void DrawFromDeck();
void DiscardToVoid(Card *cardToDiscard);

//void UseCard ability/invoke/spell

private:
std::string name;
Deck *deck;
Hand *hand;

Deck *voidZone;

Orbs *orbs;
};

Что я могу сделать, чтобы это исправить? заранее спасибо

1

Решение

Я не понимаю, почему вы делаете OSS членом Orbs.
Он используется более подходящим для локальной переменной способом, поэтому вы должны удалить его:

class Orbs
{
public:
Orbs();
~Orbs();
void Render(sf::RenderWindow &target);
void UpdateText();

private:
Orb air_orbs, darkness_orbs, death_orbs, earth_orbs, electricity_orbs,
fire_orbs, life_orbs, light_orbs, machine_orbs, metal_orbs, time_orbs,     water_orbs;
};

void Orbs::UpdateText()
{
std::stringstream oss;
oss << air_orbs.number;
air_orbs.text.setString(oss.str());
}

Или с C ++ 11:

void Orbs::UpdateText()
{
air_orbs.text.setString(std::to_string(air_orbs.number));
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]