Menu::Menu( map < string, void(*)() > options) :
menuOptions(options)
{}
菜单选项在Menu.h:私有: //简要:字符串的映射(描述选项)和调用Map < string,void(*)() >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<_Ty1,_Ty2“>::结对与_Ty1=std::string,_Ty2=void(*)()”不匹配参数列表的实例
我要问的是,如何将成员函数插入到类中的映射中?
任何帮助都将不胜感激。谢谢您:)
发布于 2017-02-27 14:39:18
&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.
https://stackoverflow.com/questions/42488280
复制相似问题