C++ 指向方法的指针

C++ 指向方法的指针,c++,visual-studio-2010,C++,Visual Studio 2010,有人知道如何在msvc2010下编译这个示例代码吗?据说是在GCC下编译的 class cmdLine; struct cmdList { const char *c; const char *s; const char *h; void (cmdLine::*cmdFuncPtr)(); }; class cmdLine { public: cmdLine(); static cmdList myCmdList[]; void

有人知道如何在msvc2010下编译这个示例代码吗?据说是在GCC下编译的

class cmdLine;

struct cmdList 
{
   const char *c;
   const char *s;
   const char *h;
   void (cmdLine::*cmdFuncPtr)();
};

class cmdLine
{
   public:
     cmdLine();
     static cmdList myCmdList[];
     void test();
};

cmdLine::cmdLine()
{
}

void cmdLine::test()
{
}

cmdList cmdLine::myCmdList[] =
{
   {"xxx", "yyy", "zzzzz", &cmdLine::test},
   {"aaa", "bbb", "ccc", 0}
};

int _tmain(int argc, _TCHAR* argv[])
{
   cmdLine c;
   (c.myCmdList[0].*cmdFuncPtr) (); //error (why?)
} 
我收到错误C2065:'cmdFuncPtr':未声明的标识符,不知道出了什么问题?

使用此语法

  (c.*c.myCmdList[0].cmdFuncPtr) ();
由于cmdFuncPtr是指向cmdLine方法的指针,因此需要在其上调用类的实例,即c。同时,cmdFuncPtr是cmdList的成员,因此它需要存储它的类的实例,即c.myCmdList[0]。这就是为什么c应该在表达式中使用两次

OP表示的表达式解析为:通过独立变量cmdFuncPtr中存储的方法指针调用c.myCmdList[0]中类实例上的方法。这样的变量不存在,这就是编译器所抱怨的。

使用这种语法

  (c.*c.myCmdList[0].cmdFuncPtr) ();
由于cmdFuncPtr是指向cmdLine方法的指针,因此需要在其上调用类的实例,即c。同时,cmdFuncPtr是cmdList的成员,因此它需要存储它的类的实例,即c.myCmdList[0]。这就是为什么c应该在表达式中使用两次


OP表示的表达式解析为:通过独立变量cmdFuncPtr中存储的方法指针调用c.myCmdList[0]中类实例上的方法。此类变量不存在,这正是编译器所抱怨的。

您缺少cmdLine::*cmdFuncPtr的声明您缺少cmdLine::*cmdFuncPtr的声明