我有一个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