Cześć! Robię klasę ScreenManager, która przechowuje tablicę klas GameScreen (klasa matki dla wszystkich klas typu: menu, pause, options, etc.). Mogę zrobić to wektorem i po kłopocie, ale chciałem sobie sprawdzić jak zrobić to podwójną gwiazdką. Niestety tak niekoniecznie chce to działać:
class MainGame;
class GameScreen;
class ScreenManager
{
public:
ScreenManager(MainGame* game);
GameScreen* MoveNext();
GameScreen* MovePrevious();
void StartScreen(size_t ScreenIndex);
void AddScreen(GameScreen* newScreen);
GameScreen* getCurrent();
private:
friend class MainGame;
MainGame* game = nullptr;
GameScreen** screens = nullptr;
int screenSize = 0;
size_t currentScreenIndex = -1;
};
ScreenManager::ScreenManager(MainGame *Game) : game(Game) {}
GameScreen* ScreenManager::MoveNext()
{
GameScreen* currentScreen = getCurrent();
if (currentScreen->getNextScreenIndex() != SCREEN_INDEX_NO_SCREEN) {
currentScreenIndex = currentScreen->getNextScreenIndex();
} else std::cout << "No next screen index!" << std::endl;
return getCurrent();
}
GameScreen* ScreenManager::MovePrevious()
{
GameScreen* currentScreen = getCurrent();
if (currentScreen->getPreviousScreenIndex() != SCREEN_INDEX_NO_SCREEN) {
currentScreenIndex = currentScreen->getPreviousScreenIndex();
} else std::cout << "No previous screen index!" << std::endl;
return getCurrent();
}
void ScreenManager::StartScreen(size_t ScreenIndex)
{
currentScreenIndex = ScreenIndex;
}
void ScreenManager::AddScreen(GameScreen* newScreen)
{
newScreen->setScreenIndex(screenSize);
screens[screenSize] = newScreen;
++screenSize;
newScreen->game = game;
}
GameScreen* ScreenManager::getCurrent()
{
if (currentScreenIndex == SCREEN_INDEX_NO_SCREEN) return nullptr;
return screens[currentScreenIndex];
}
Po dodaniu i ustawieniu ekranu startowego pojawia się błąd :
Exception thrown: write access violation.
this->screens was 0x1110112.
A callstack kieruje mnie do 37 linii, tzn screens[screenSize] = newScreen;
W jaki sposób napisać to żeby działało?