Witajcie.
Mam drobny problem z przekazaniem obiektu jako referencja do settera. Chcę ten obiekt przypisać do zmiennej/referencji/wskaźnika typu GameState, ale szukam informacji i nie mogę znaleźć żadnych danych. Jeżeli ktoś ma jakiś pomysł, byłbym wdzięczny za wytłumaczenie :)
Poniżej wstawiam kod programu:
Tutaj mamy nagłówki:
#ifndef GAMESTATE_H
#define GAMESTATE_H
#include "../../classes/states/States.cpp"
class GameState {
public:
GameState();
virtual void init() =0;
virtual void update() =0;
virtual void render() =0;
virtual void input();
virtual void setState(GameState&);
virtual GameState& getState() const;
virtual ~GameState();
private:
GameState *gameState;
};
#endif // GAMESTATE_H
#ifndef GAMESTATEMANAGER_H
#define GAMESTATEMANAGER_H
#include "GameState.h"
#include "PlayState.h"
//#include "../../classes/states/States.cpp"
class GameStateManager {
public:
GameStateManager();
GameState *gameState; // <- Zmienna ma być zapisana do tego parametru
int state;
~GameStateManager();
void setState(int);
void currentState();
int getState();
};
#endif // GAMESTATEMANAGER_H
#ifndef PLAYSTATE_H
#define PLAYSTATE_H
class PlayState : GameState {
public:
PlayState();
void init();
void update();
void render();
void input();
~PlayState();
};
#endif // PLAYSTATE_H
Tutaj mamy pliki źródłowe:
#include "../../headers/states/GameState.h"
void GameState::setState(GameState & s) {
*gameState = s;
}
GameState& GameState::getState() const {
return *gameState;
}
#include "../../headers/states/GameStateManager.h"
GameStateManager::GameStateManager() {
}
void GameStateManager::setState(int s) {
state = s;
currentState();
}
void GameStateManager::currentState() {
if(state == 1) {
// @todo implement MenuState class
//gameState = new MenuState(this);
}
if(state == 2) {
// @todo make PlayState class not abstract
PlayState playState;
GameState::setState(playState); // <- TUTAJ WYSKAKUJE BLAD
}
}
/** GameStateManager::getState() - returns current state
* @return int state - returns int type responsible for state
*/
int GameStateManager::getState() {
return state;
}
#include "../../headers/states/PlayState.h"
PlayState::PlayState() {
}
void PlayState::init() {
}
void PlayState::update() {
}
void PlayState::render() {
}
void PlayState::input() {
}
voit PlayState::init() {
}
PlayState::~PlayState() {
}