J'ai une classe Snake, qui a un pointeur vers un objet de classe Controller. Ce pointeur recevra de nouvelles données, un objet dérivé du contrôleur (par exemple AIController), lors de l'exécution.Types incomplets/déclaration directe/compilation compréhension requise
J'ai besoin que les objets Contrôleur transmettent un pointeur à Snake lorsqu'ils sont construits pour que je puisse appeler des Getters/Setters Snake dans la classe du contrôleur.
Sur la ligne, dans le constructeur de serpent, battant pavillon dans l'extrait ci-dessous je reçois les erreurs suivantes:
In constructor 'Snake::Snake()':|
error: expected type-specifier before 'PlayerController'|
error: cannot convert 'int*' to 'Controller*' in assignment|
error: expected ';' before 'PlayerController'|
Snippet:
Snake::Snake() : _xVelocity(0), _yVelocity(0)
{
_controller = new PlayerController(this);
Initialise();
}
Serpent est défini comme ceci:
class Controller;
class Snake
{
public:
Snake();
virtual ~Snake();
...
private:
...
Controller* _controller;
};
Contrôleur comme ceci:
#include "Snake.hpp"
class Controller
{
public:
Controller(Snake* s);
~Controller();
protected:
...
Snake* _s;
};
et PlayerController comme ceci:
#include "Controller.hpp"
class PlayerController : public prg::IKeyEvent, public Controller
{
public:
PlayerController(Snake* s);
~PlayerController();
private:
virtual bool onKey (const prg::IKeyEvent::KeyEvent& key);
};
Je ne suis pas certain que ma tentative d'utiliser un pointeur vers un objet contrôleur afin que je puisse affecter les contrôleurs de serpents différents lors de l'exécution est correcte et je sais que somethings pas tout à fait raison avec mon utilisation de la déclaration avant. J'apprécie les réponses initiales et espère que fournir les erreurs vous permettra de me donner plus d'informations. Je vais continuer à essayer de nettoyer le problème afin que je puisse bien comprendre le processus de compilation, mais en attendant j'apprécierais vraiment toute aide!
Vous avez deux fichiers d'en-tête qui se «# comprennent» l'un l'autre. C'est presque toujours faux. Forward-déclare 'classe Snake' dans' Controller.hpp', et déclare en avant 'classe Controller' dans' Snake.hpp'. –
Ce serait plus simple si vous pouviez fournir un exemple de code minimal qui démontre votre problème, afin que nous puissions le compiler et essayer de changer (implémenter des classes qui ne font rien). Parfois, en essayant d'écrire un code minimal qui reproduit le problème, il devient plus facile de voir ce qui ne va pas et vous pourriez finir par découvrir comment le réparer vous-même ... Vous pouvez aussi poster les avertissements du compilateur ... – pzanoni
erreur dans Snake :: Snake() est (très probablement) dans Snake.cpp. Avez-vous inclus Controller.hpp dans Snake.cpp? – selalerer