我一直在为虚拟棋盘游戏尝试一种基于文本的命令界面。我一直在阅读成员函数作为参数,但到目前为止我所有的尝试都没有产生结果。 我的目的是模块化,这样我就可以通过在控制台中设置字符串来轻松添加命令。
这是我用来调用每个函数的函数:
void command(string in, string name, void (*fnc)())
{
if(in == name)
{
(*fnc)();
}
}
我在play()函数中调用它:
void play()
{
string cmd;
do
{
getline(cin, cmd);
command(cmd, "print_all", &print_all);
}
while(cmd != "exit");
}
print_all():
void print_all()
{
for(int i = 0; i < cards.size(); i++)
{
cout << cards[i].name
<< "/n Mana:" << cards[i].cost
<< "/n Attack:" << cards[i].attack
<< "/n Defense:" << cards[i].defense
<< endl;
}
}
这是构造函数,以提供有关代码的更多信息:
public:
game()
{
init_cards(); // This just fills the vector "cards" with data.
play();
}
这是我的主要内容:
int main()
{
game GAME;
return 0;
}
出于某种原因,这是产生此错误:
error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&game::print_all' [-fpermissive]|
我已尝试按照错误日志的建议将&game::print_all
替换为call参数,但无效。
提前感谢您的帮助。希望这是一个简单的解决方案,我只是太盲目无法看到它。