私は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);
};
私は私の試み私は、実行時に蛇異なるコントローラを割り当てることができるようにコントローラオブジェクトへのポインタを使用するが正しいことかどうか分からないし、私はその代を知っています私は前方宣言を使用することで正しくはありません。私は初期の反応を感謝し、エラーを提供することが私にいくつかの詳細情報を与えることができることを願っています。私は問題を解決してコンパイルプロセスを正しく理解できるようにしていきますが、その間は本当に助けに感謝しています!
お互いに '#include 'という2つのヘッダファイルがあります。これはほとんど常に間違っています。 '' Controller.hpp'の 'class Snake'を前方宣言し、' Snake.hpp'の 'class Controller'を前方宣言します。 –
あなたの問題を示す最小限のサンプルコードを提供できれば、それをコンパイルして変更することができます(何もしないクラスを実装する)ことは簡単でしょう。場合によっては、問題を再現する最小限のコードを書こうとすると、何が間違っているのかが分かりやすくなり、自分で修正する方法を発見することになるかもしれません...あなたは見ているコンパイラの警告を投稿することもできます... – pzanoni
The Snake :: Snake()のエラーはSnake.cppの(おそらく)です。 Controller.hppをSnake.cppにインクルードしましたか? – selalerer