C++ c++;将类成员函数添加到映射中 Menu::Menu(映射选项): 菜单选项(选项) {}
菜单中的菜单选项delcaration。h: 私人: //简介:字符串(描述选项)和要调用的链接函数的映射 mapC++ 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(菜单::
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.