0

Controllerクラスオブジェクトへのポインターを持つSnakeクラスがあります。このポインターには、実行時にコントローラー(AIControllerなど)から派生したオブジェクトである新しいデータが割り当てられます。

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

その行で、以下のスニペットでフラグが立てられた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);

};

実行時にスネークに異なるコントローラーを割り当てることができるように、コントローラーオブジェクトへのポインターを使用する試みが正しいかどうかはわかりません。また、前方宣言を使用すると、何かが正しくないことがわかります。私は最初の回答に感謝し、エラーを提供することで私にもう少し情報を与えることができることを願っています。コンパイルプロセスを正しく理解できるように、引き続き問題のクリーンアップを試みますが、それまでの間、助けていただければ幸いです。

4

1 に答える 1

0

ヘッダーを含める前に必要ではないヘッダーに前方宣言を入れます。ヘッダーを含める前に配置する場合は、ヘッダーを含める前に毎回実行する必要があります。

ここで欠落していると思われるもう1つのことは、重複する包含ガードです(#ifndefまたは#pragmaを1回使用)。

将来的には、発生している実際のエラー(コンパイラのエラーメッセージ)をここに配置するのが最善です。

于 2012-04-05T16:34:36.600 に答える