如何在扩展类中定义指向成员函数的指针

时间:2017-09-21 10:14:19

标签: c++ pointers

我需要将现有项目从C转移到C ++,当然,我被困住了。问题是指向扩展类中成员函数的指针。所以,这是一个例子:

基础课

typedef void (*fnMenuFunction)(int argc, char *argv[]);

typedef struct {
    const char      *mnuCommand;
    const char       mnuShortcut;
    fnMenuFunction   mnuFunction;
    const char      *mnuDescription;
} menuItem;

#define     UNKNOWN_COMMAND     -1
#define     TOO_MANY_ARGS       -2

class Menu {
public:
    Menu();
    virtual ~Menu();
    virtual void intMenu(void);
    int processCommand(const char * command);
    menuItem menuItems[];
private:
    int currentItem;
};

和新的基于Manu的

#include "utils/Menu.h"

class CommandMenu: public Menu {
public:
    void initMenu(void);
    void CMD_showHelp(int argc, char **argv);
private:
};

现在,当我尝试定义menuItem结构

#include "CommandMenu.h"

void CommandMenu::initMenu() {
    menuItem menuItems[] = {
        {"help", '?',     CMD_showHelp,          " : display help message" },
        { 0, 0, 0, 0 }
    };
}

void CommandMenu::CMD_showHelp(int argc, char **argv) {
    // do something
}

我收到了几个错误错误

首先,如果我尝试像这样使用它

menuItems[] = {
            {"help", '?',     CMD_showHelp,          " : display help message" },
            { 0, 0, 0, 0 }
        };

我收到了消息

  

'''令牌

之前的预期主要表达

如果我把它留在上面的例子中

menuItem menuItems[] = {
    {"help", '?',     CMD_showHelp,          " : display help message" },
    { 0, 0, 0, 0 }
};

我收到了消息

  

无法从'void'类型转换'CommandMenu :: CMD_showHelp'   (CommandMenu ::)(int,char **)'键入'const char *'

有人可以解释一下我在C ++中的工作原理吗?

THX 戈兰

0 个答案:

没有答案