我需要将现有项目从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 戈兰