1

任何人都知道如何在 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' : undeclared identifier 并且不知道出了什么问题?

4

1 回答 1

5

使用此语法

  (c.*c.myCmdList[0].cmdFuncPtr) ();

作为cmdFuncPtr指向 的方法的指针cmdLine,它需要一个要调用的类的实例,即c. 同时,cmdFuncPtr是 的成员cmdList,所以它需要一个存储它的类的实例,即c.myCmdList[0]. 这就是为什么c应该在表达式中使用两次。

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

于 2012-08-21T11:51:45.050 回答