2011-07-29 15 views
4

私はゲームエンジンで作業しており、状態設計を実装しています。私は、すべての初期化をすべて処理するエンジンクラスを持っており、アクティブ状態の更新、レンダー、および入力機能を呼び出すゲームループを含んでいます。単項「&」オペランドとしてC++の左辺値が必要

すべての異なる状態は、将来の使用のためにエンジンの保護された参照を初期化するために、そのコンストラクタ内のEngineクラスへの参照を必要とするStateから継承します。私はエラーが報告されるところである新しいGameStateオブジェクトを作成、初期化子でengine.cppで

// 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) {} 
}; 

し、最終的に:ここでは、関連するコードです。

GameState *state = new GameState(&this); 

私は分でLinux上のQt Creatorの使用してC++でそれをコーディングしています、それはgccのかとの問題だかどうかを確認するために、今Windowsマシンにアクセスすることはできません。

+0

メンバポインタではなくextern'dグローバルポインタがないのはなぜですか? –

+0

@ Shaktalいいえ、エンジンを選ぶことはできません。注射は良いことです。グローバル変数は確かに悪いことです。実際、「状態」はエンジンのメンバーであってはならない。さらに、C++は現代的な言語ですが、ポインタを使用しないでください。なぜ単にエンジンエンジンではないのですか? GameState状態(エンジン) '? – log0

答えて

8

変更:

GameState *state = new GameState(&this); 

へ:

GameState *state = new GameState(*this); 

あなたは国家クラスのコンストラクタを参照することにより、エンジンを渡しているためです。

+0

なぜリファレンスではないものを間接参照していますか... –

+0

私はポインタを意味しています。混乱したくないです。 –

+2

@Jesusしかし 'this'は参照ではなく、逆参照する必要があります。参照。 – Rup

関連する問題