Obiekty składowe są inicjalizowane w C++ w kolejności ich deklaracji w deklaracji klasy ( ;) ). Rozwiązaniem problemu jest zmiana kolejności definiowania obiektów w klasie Game. Lista inicjalizacyjna w konstruktorze klasy powinna być zgodna z kolejnością deklaracji obiektów składowych klasy - kompilator powinien dać ostrzeżenie, jeśli kolejność jest zaburzona. Dla kompilatora z kolekcji GCC, opcja -Wall włącza większość ostrzeżeń, w tym i te wspomniane.
W tej chwili, w momencie tworzenia obiektu klasy Game, jako pierwszy obiekt wewnętrzny zostanie zainicjalizowana składowa mainWindow - zgodnie z kolejnością w deklaracji klasy (plik Game.hpp). W tym momencie nie istnieje jeszcze poprawnie zainicjalizowany obiekt windowSize ani windowTitle - one zostaną zainicjalizowane później - a "później" to za późno dla obiektu mainWindow.
Taka zmiana powoduje poprawne tworzenie obiektu okna:
#ifndef GAME_HPP_INCLUDED
#define GAME_HPP_INCLUDED
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include "enums.hpp"
class Game
{
public:
Game();
void run();
private:
sf::Vector2u windowSize, playableArea;
gamestate gameState;
std::string windowTitle;
sf::RenderWindow mainWindow;
sf::Clock clock;
sf::Time time;
void init();
void processEvents();
void update();
void render();
};
#endif // GAME_HPP_INCLUDED