首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++在映射中添加类成员函数

c++在映射中添加类成员函数
EN

Stack Overflow用户
提问于 2017-02-27 14:30:53
回答 1查看 1.5K关注 0票数 1
代码语言:javascript
运行
复制
Menu::Menu( map < string, void(*)() > options) :
    menuOptions(options)
{}

菜单选项在Menu.h:私有: //简要:字符串的映射(描述选项)和调用Map < string,void(*)() >menuOptions的链接函数中;

代码语言:javascript
运行
复制
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(*)()”不匹配参数列表的实例

我要问的是,如何将成员函数插入到类中的映射中?

任何帮助都将不胜感激。谢谢您:)

EN

回答 1

Stack Overflow用户

发布于 2017-02-27 14:39:18

&Menu::printInvalidEntryErrorMessage的类型不是void(*)(),而是实际上的void(Menu::*)()。你应该把它写在地图上:

代码语言:javascript
运行
复制
using function_t = void(Menu::*)();
std::map<std::string, function_t> menuOption;

您可以像这样在地图上插入(实际上更快!):

代码语言:javascript
运行
复制
menuOption.emplace("Keeran", &Menu::printInvalidEntryErrorMessage);

原因是this:您需要将实例传递给您的成员函数。指向成员函数的指针是这样使用的:

代码语言:javascript
运行
复制
auto func = &Menu::printInvalidEntryErrorMessage;
(this->*func)(); // call to function.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42488280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档