C++ 错误:无效使用void表达式C++;
我正在尝试为一个学校项目实现一个菜单系统,在这个项目中,我有一个STL映射,其中包含以C++ 错误:无效使用void表达式C++;,c++,C++,我正在尝试为一个学校项目实现一个菜单系统,在这个项目中,我有一个STL映射,其中包含以 map<string, YMenu> 调用生成错误的成员函数时使用的语法: Menus["0.0"].addNextAction(1, Menus["0.1"].show()); 有什么可能的解决办法吗?我试着在谷歌上搜索,但似乎找不到答案/ 解决:谢谢大家,显然我在那里犯了一些愚蠢的错误。我终于成功地实现了代码,并通过使用std::function和std::bind()将其
map<string, YMenu>
调用生成错误的成员函数时使用的语法:
Menus["0.0"].addNextAction(1, Menus["0.1"].show());
有什么可能的解决办法吗?我试着在谷歌上搜索,但似乎找不到答案/
解决:谢谢大家,显然我在那里犯了一些愚蠢的错误。我终于成功地实现了代码,并通过使用std::function和std::bind()将其编译和运行。与菜单[“0.1]”。show()
您正在调用该函数
您也不能像您尝试的那样存储指向成员函数的指针,除非您在最终调用成员函数指针时实际拥有对象实例。我建议您调查并:
std::vector使用和的组合,而不是使用C风格的函数指针,如下所示:
std::vector<std::function<void()> > nextAction;
void YMenu::addNextAction(int index, std::function<void()> Action)
{
nextAction[index] = Action;
}
Menus["0.0"].addNextAction(1, std::bind(&YMenu::show, &Menus["0.1"]));
std::vector nextAction;
void YMenu::addNextAction(int索引,std::函数操作)
{
nextAction[索引]=操作;
}
菜单[“0.0”]。addNextAction(1,std::bind(&YMenu::show,&menu[“0.1”]);
菜单[“0.1”]的类型。show()
不是函数指针。它是对特定对象调用show()
的结果。看起来,您的show()
函数返回int
。尝试以任何形式将函数推入空白(*)(
)都不会有多大乐趣
您可能正在寻找的是std::function
,它可以用来调用空函数对象,也就是说,不需要参数就可以调用它。要传递的函数似乎是一个成员函数,因此它实际上有一个参数,即隐式传递的this
指针。您还希望忽略返回类型,std::function
很乐意为您这样做。也就是说,您的nextAction
向量将声明为
std::vector<std::function<void()> nextAction;
还请注意,只有在执行此操作之前使用
index
索引std::vector
不会自动调整大小到合适的大小以适应新索引:该索引必须明确用于std::vector
消息对应于哪一行?应该调用函数指针的无效使用
要添加函数(指针)本身,而不是调用它的结果。可能是菜单[“0.1”]。show()
应该是菜单[“0.1”]。show
,但我感觉这里有更大的问题。从阅读一本好的C++书籍开始。
std::vector<std::function<void()> nextAction;
nextAction.push_back(std::bind(&YMenu::show, &Menus["0.1"]));
std::vector<std::function<void()> > nextAction;
void YMenu::addNextAction(int index, std::function<void()> Action)
{
nextAction[index] = Action;
}
Menus["0.0"].addNextAction(1, std::bind(&YMenu::show, &Menus["0.1"]));
std::vector<std::function<void()> nextAction;
Menues["0.0"].addNextAction(1, std::bind(&YMenu::show, &Menus["0.1"]));