Menu::Menu( map < string, void(*)() > options) :
menuOptions(options)
{}
Menu.h中的菜单选项说明: 私人的: //简介:字符串的映射(描述选项)和要调用的链接函数 地图&lt; string,void(*)()&gt; menuOptions;
void Menu::printInvalidEntryErrorMessage() {
cout << INVALID_ENTRY_ERROR_MESSAGE << endl;
}
int Menu::startMenu() {
pair<string, void(*)()> newPair = { "randomString", Menu::printInvalidEntryErrorMessage };
menuOptions.insert(newPair);
}
尝试插入此菜单类成员的地图时出错。我在尝试编译代码时遇到的错误如下:
没有构造函数的实例“std :: pair&lt; _Ty1,_Ty2”&gt; :: pair [with _Ty1 = std :: string,_Ty2 = void(*)()]“匹配参数列表
我要问的是如何将成员函数插入到类中的地图中?
任何帮助将不胜感激。谢谢:))
答案 0 :(得分:2)
&Menu::printInvalidEntryErrorMessage
的类型不是void(*)()
,而是void(Menu::*)()
。你应该在你的地图中包含它:
using function_t = void(Menu::*)();
std::map<std::string, function_t> menuOption;
您可以像这样插入地图(它实际上更快!):
menuOption.emplace("Keeran", &Menu::printInvalidEntryErrorMessage);
原因是this
:您需要将实例传递给您的成员函数。成员函数的指针使用如下:
auto func = &Menu::printInvalidEntryErrorMessage;
(this->*func)(); // call to function.