C++ c++;将类成员函数添加到映射中 Menu::Menu(映射选项): 菜单选项(选项) {}

C++ c++;将类成员函数添加到映射中 Menu::Menu(映射选项): 菜单选项(选项) {},c++,insert,stdmap,std-pair,C++,Insert,Stdmap,Std Pair,菜单中的菜单选项delcaration。h: 私人: //简介:字符串(描述选项)和要调用的链接函数的映射 map菜单选项 Menu::Menu( map < string, void(*)() > options) : menuOptions(options) {} void菜单::printInvalidEntryErrorMessage(){ cout菜单::printInvalidEntryErrorMessage的类型不是void(*)(),而是void(菜单::

菜单中的菜单选项delcaration。h: 私人: //简介:字符串(描述选项)和要调用的链接函数的映射 map菜单选项

Menu::Menu( map < string, void(*)() > options) :
    menuOptions(options)
{}
void菜单::printInvalidEntryErrorMessage(){

cout菜单::printInvalidEntryErrorMessage的类型不是
void(*)(
),而是
void(菜单::*)()
。您应该在地图中包含:

void Menu::printInvalidEntryErrorMessage() {
    cout << INVALID_ENTRY_ERROR_MESSAGE << endl; 
}

int Menu::startMenu() {
    pair<string, void(*)()> newPair = { "randomString", Menu::printInvalidEntryErrorMessage };
    menuOptions.insert(newPair);
}
原因是
:您需要将实例传递给您的成员函数。指向成员函数的指针如下所示:

menuOption.emplace("Keeran", &Menu::printInvalidEntryErrorMessage);

成员函数比
void(*)()复杂一些
,我记不清指向成员函数的指针的语法,但您可以尝试使用
std::function
Menu::printInvalidEntryErrorMessage
是一个成员函数。无法由函数指针指向。指向成员函数的指针的语法为:
void(Menu::*)()
@mpiatek当然你可以为一个(非静态)成员函数声明一个函数指针。请看我上面的评论。@πάνταῥεῖ 我的意思是:不能被指向常规函数的指针指向。它需要指向成员函数的指针谢谢,工作正常:)
menuOption.emplace("Keeran", &Menu::printInvalidEntryErrorMessage);
auto func = &Menu::printInvalidEntryErrorMessage;
(this->*func)(); // call to function.