J'essaie d'utiliser std::bind
avec une fonction pure virtuelle dans une classe abstraite mais J'utilise une stratégie d'appel de modèle de conception, car je veux créer un programme capable de gérer le basculement dynamique entre Jeu.Impossible de lier la fonction de la classe abstraite en C++
Je n'obtiens pas la syntaxe. voici le code:
Voici ma classe d'interface
class IGame
{
public:
virtual ~IGame(){};
virtual void move_up(INFO &info)=0;
}
Par ailleurs INFO
est DEFINE:
#define INFO std::pair<struct GetMap*, struct WhereAmI*>
Voici ma classe de contrôle dans son constructeur que j'appelle std::bind
appel;
class CGame
{
private:
IGame *game;
int score;
std::pair<struct GetMap*, struct WhereAmI*> info; // game information
std::vector<std::function<void(std::pair<struct GetMap*, struct WhereAmI*>&)>> ptr_move_ft; //function pointer vector
public:
CGame();
~CGame();
void return_get_map(INFO &info);
}
Ceci est le constructeur de CGame
classe:
CGame::CGame()
{
game = new Snake();
this->info = std::make_pair(init_map(MAP_PATH_SNAKE,0), game->init_player());
ptr_move_ft.push_back(std::bind(&CGame::return_where_i_am, this,std::placeholders::_1)); //this work
ptr_move_ft.push_back(std::bind(&game->move_up, game, std::placeholders::_1)); //this create a error
}
Ainsi, la deuxième push_back
fait cette erreur:
source/CGame.cpp: In constructor ‘arcade::CGame::CGame()’:
source/CGame.cpp:131:44: error: ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say ‘&arcade::IGame::move_up’ [-fpermissive]
ptr_move_ft.push_back(std::bind(&game->move_up, game, std::placeholders::_1));
Comment puis-je faire? Désolé pour mon mauvais code anglais et C++.
s'il vous plaît ne pas user '# define' lorsqu'un' typedef' fera – user463035818
votre question isnt que ce soit clair, parce que le compilateur dit déjà que vous ne pouvez pas le faire. Vous devriez reformuler la question pour demander ce que vous voulez réellement accomplir. Comme c'est maintenant il ne peut pas être réparé – user463035818