2011-07-29 84 views
4

我正在研究遊戲引擎並致力於實現狀態設計。我有一個引擎類負責所有的初始化操作,幷包含調用更新,渲染和處理活動狀態輸入函數的遊戲循環。需要作爲一元'&'操作數的C++左值

我所有不同的狀態都繼承自需要引用Engine類的State,以便初始化引擎的保護引用以供將來使用。下面是相關的代碼:

// file: state.h 
class Engine; 

class State { 
public: 

    State(Engine &engine) : mEngine(engine) { } 
protected: 
    Engine &mEngine; 
}; 

// file: gamestate.h 
class GameState : public State { 
public: 
    GameState(Engine &engine) : State(engine) {} 
}; 

終於在初始化engine.cpp我創建了一個新的遊戲狀態的對象,這是其中報告的錯誤。

GameState *state = new GameState(&this); 

我編碼在C++在Linux上使用Qt創建者在一分鐘,沒有進入到Windows機器現在就看它是否與海灣合作委員會還是不成問題的。

+0

爲什麼不具有外部全局指針而不是成員指針? –

+0

@ Shaktal不,不可能選擇一個引擎。注射是一件好事。和全局變量肯定是一件壞事。事實上,「國家」甚至不應該是引擎的一員。而且C++是一種現代語言,不要再用指針來搞亂你不需要的!爲什麼不簡單'引擎引擎; GameState狀態(引擎)'? – log0

回答

8

變化:

GameState *state = new GameState(&this); 

到:

GameState *state = new GameState(*this); 

這是因爲您是按引用傳遞引擎的國家類的構造函數。

+0

你爲什麼取消引用不是引用的東西... –

+0

我的意思是指針,不想混淆 –

+2

@Jesus,但是'this'是一個指針而不是引用 - 他需要對它進行取消引用以便將其作爲一個參考。 – Rup

相關問題