【发布时间】:2015-02-08 05:09:32
【问题描述】:
我正在用 C++ 创建一个控制台菜单,我想给菜单中的每个项目一个回调函数,所以当一个项目被选中时,会调用一个不同的函数。 到目前为止,我有这个代码:
#include <iostream>
#include <vector>
using namespace std;
class Core
{
public:
void action1() {}
void action2() {}
//...
};
typedef void (Core::*CoreFunc)();
class Menu
{
struct Option
{
Option(CoreFunc cb) : callback(cb) {}
//some data
CoreFunc callback;
//some more data
};
vector<Option> m_options;
public:
Menu(Core const& core)
{
addOption(core.action1);
}
void addOption(CoreFunc callback)
{
m_options.push_back(Option(callback));
}
void execOptionX(int index)
{
m_options[index].callback();
}
};
int main()
{
Core core;
Menu menu(core);
menu.execOptionX(0);
return 0;
}
这给了我这个错误:
no matching function for call to ‘Menu::addOption(<unresolved overloaded function type>)’
addOption(core.action1);
还有
must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘((Menu*)this)->Menu::m_options.std::vector<_Tp, _Alloc>::operator[]<Menu::Option, std::allocator<Menu::Option> >(((std::vector<Menu::Option>::size_type)index)).Menu::Option::callback (...)’, e.g. ‘(... ->* ((Menu*)this)->Menu::m_options.std::vector<_Tp, _Alloc>::operator[]<Menu::Option, std::allocator<Menu::Option> >(((std::vector<Menu::Option>::size_type)index)).Menu::Option::callback) (...)’
当我尝试调用该函数时。
我见过很多成员函数指针的实现,但都是在同一个类中使用的。
为什么会出现这些错误?
让这段代码编译/工作的正确语法是什么?
谢谢
【问题讨论】:
标签: c++ function pointers member pointer-to-member