指向方法的指针

Pointer to method

本文关键字:指针 方法      更新时间:2023-10-16

有人知道如何在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。同时,cmdFuncPtrcmdList的成员,因此它需要存储它的类的一个实例,即c.myCmdList[0]。这就是为什么c应该在表达式中使用两次。

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