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.