Wykorzystywanie niezdefiniowanego typu. Problem z kolejnością w implementacji wzorca stanu.

0

Cześć.
Stworzyłem trzy klasy, w celu wstępnego zapoznania się ze wzorcem stanu (na podstawie przykładu z książki "Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku").

//Deklaracja klas
class State;
class Interface;
class Menu;

//Klasa podstawowa
class State {
public:
	virtual void test(Interface*) {}

private:
	void changeState(Interface* i, State* s) { i->changeState(s); }  //Problematyczny wiersz
};

//Klasa dziedziczaca - stan
class Menu : State {
public:


	virtual void test(Interface*) { std::cout << "Dziala\n"; }
};


//Klasa do przechowania stanu
class Interface {
public:
	Interface() = default;
	Interface(State* s) : _state(s) {}

	void test() { _state->test(this); }     //Problematyczny wiersz
	


private:
	friend class State;
	void changeState(State* s) { _state = s;  }
	State* _state;
};

W kodzie zaznaczyłem dwa wiersze, które sprawiają problemy.
Podczas próby kompilacji, jeden bądź drugi (w zależności od kolejności wklejenia klas do pliku) zwraca błąd kompilacji o próbie użycia niezdefiniowanego typu
(co jak najbardziej rozumiem).

Chciałbym zapytać jak mogę rozwiązać ten problem.

1

Rozdzielić nagłówki i implementacje. W nagłówku zostawiasz forward declarations, w implementacji dołączasz nagłówek całość danej (nieznanej w pełni przez nagłówek) klasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1