有谁知道如何在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) ();

由于cmdFuncPtrcmdLine方法的指针,因此需要调用该类的实例c。同时,cmdFuncPtrcmdList的成员,因此它需要一个存储该类的实例,即c.myCmdList[0]。这就是为什么c在表达式中要使用两次的原因。

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

关于c++ - 方法指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12054026/

10-10 11:19