我有一個Snake類,它有一個指向Controller類對象的指針。該指針將在運行時分配一些新數據,這是一個從控制器派生的對象(例如AIController)。不完整類型/前向聲明/需要編譯理解
我需要Controller對象傳遞一個指向Snake的指針,以便我可以在控制器類中調用Snake Getters/Setters。
就行了,在蛇的構造,標記在片段下面我得到以下錯誤:
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);
};
我不能肯定,我嘗試使用指針到控制器對象,以便我可以分配蛇不同的控制器在運行時是正確的,我知道,有些事情與我使用前向聲明不太相符。我很欣賞最初的迴應,並希望提供錯誤將允許您提供更多信息。我將繼續嘗試清理問題,以便我可以正確理解編譯過程,但同時我非常感謝任何幫助!
你有兩個頭文件''包括'對方。這幾乎總是錯誤的。 在'Controller.hpp'中前向聲明'class Snake',並在'Snake.hpp'中前向聲明'class Controller'。 – 2012-04-05 16:28:54
如果你能提供一個能夠證明你的問題的簡單示例代碼,那麼它會更容易,所以我們可以編譯它並嘗試改變(實現不做任何事的類)。有時候,當試圖編寫一個能夠再現問題的最小代碼時,就會更容易發現錯誤,並最終發現如何自己修復它......您還可以發佈編譯器警告,您會看到...... – pzanoni 2012-04-05 16:29:03
The Snake :: Snake()中的錯誤(最可能)是Snake.cpp中的錯誤。您是否在Snake.cpp中包含Controller.hpp? – selalerer 2012-04-05 18:03:48