C++ 错误:无效使用void表达式C++;

C++ 错误:无效使用void表达式C++;,c++,C++,我正在尝试为一个学校项目实现一个菜单系统,在这个项目中,我有一个STL映射,其中包含以 map<string, YMenu> 调用生成错误的成员函数时使用的语法: Menus["0.0"].addNextAction(1, Menus["0.1"].show()); 有什么可能的解决办法吗?我试着在谷歌上搜索,但似乎找不到答案/ 解决:谢谢大家,显然我在那里犯了一些愚蠢的错误。我终于成功地实现了代码,并通过使用std::function和std::bind()将其

我正在尝试为一个学校项目实现一个菜单系统,在这个项目中,我有一个STL映射,其中包含以

    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"]));