2012-04-05 20 views
0

私はSnakeクラスを持っています。これにはControllerクラスオブジェクトへのポインタがあります。このポインタには、実行時にコントローラ(例えば、AIController)から派生したオブジェクトである新しいデータが割り当てられます。不完全な型/前方宣言/コンパイルの理解が必要です

Controllerオブジェクト内にSnake Getters/Settersを呼び出すことができるように、コントローラオブジェクトを構築するときにSnakeへのポインタを渡す必要があります。

In constructor 'Snake::Snake()':| 
error: expected type-specifier before 'PlayerController'| 
error: cannot convert 'int*' to 'Controller*' in assignment| 
error: expected ';' before 'PlayerController'| 

スニペット:

Snake::Snake() : _xVelocity(0), _yVelocity(0) 
{ 
    _controller = new PlayerController(this); 
    Initialise(); 
} 

ヘビは次のように定義されていますラインで

は、蛇のコンストラクタで、私は次のエラーを取得下のスニペットにフラグを立て

class Controller; 

class Snake 
{ 
    public: 
     Snake(); 
     virtual ~Snake(); 
... 

    private: 
     ... 
     Controller* _controller; 


}; 

コントローラはこのようになります:

#include "Snake.hpp" 

class Controller 
{ 
    public: 
     Controller(Snake* s); 
     ~Controller(); 


    protected: 
     ... 
     Snake* _s; 
}; 

とPlayerControllerこのように:

#include "Controller.hpp" 

class PlayerController : public prg::IKeyEvent, public Controller 
{ 
    public: 
     PlayerController(Snake* s); 
     ~PlayerController(); 


    private: 
     virtual bool onKey (const prg::IKeyEvent::KeyEvent& key); 

}; 

私は私の試み私は、実行時に蛇異なるコントローラを割り当てることができるようにコントローラオブジェクトへのポインタを使用するが正しいことかどうか分からないし、私はその代を知っています私は前方宣言を使用することで正しくはありません。私は初期の反応を感謝し、エラーを提供することが私にいくつかの詳細情報を与えることができることを願っています。私は問題を解決してコンパイルプロセスを正しく理解できるようにしていきますが、その間は本当に助けに感謝しています!

+0

お互いに '#include 'という2つのヘッダファイルがあります。これはほとんど常に間違っています。 '' Controller.hpp'の 'class Snake'を前方宣言し、' Snake.hpp'の 'class Controller'を前方宣言します。 –

+0

あなたの問題を示す最小限のサンプルコードを提供できれば、それをコンパイルして変更することができます(何もしないクラスを実装する)ことは簡単でしょう。場合によっては、問題を再現する最小限のコードを書こうとすると、何が間違っているのかが分かりやすくなり、自分で修正する方法を発見することになるかもしれません...あなたは見ているコンパイラの警告を投稿することもできます... – pzanoni

+0

The Snake :: Snake()のエラーはSnake.cppの(おそらく)です。 Controller.hppをSnake.cppにインクルードしましたか? – selalerer

答えて

0

ヘッダーに前方宣言を入れると、ヘッダーを含める前に必要ではありません。ヘッダーを含める前にそれを置く場合は、ヘッダーを含める前に毎回行う必要があります。

ここで欠落しているように見える別のものは、重複する包含ガード(#ifndefまたは#pragma onceのいずれか)です。

現時点で実際に発生しているエラー(コンパイラのエラーメッセージ)をここに入力することをお勧めします。

+0

アドバイスありがとう、申し訳ありません私は今いくつかの詳細を追加しました。私は各hppに包括的なガードを持っています。私はちょうど私の質問をきちんとしておくためにそれらを貼り付けませんでした。将来はそのことを念頭に置いてください! – Holly

関連する問題