1

Anyone knows how to compile this example code under msvc2010 ? (supposedly compiles under 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?)
} 

I get error C2065: 'cmdFuncPtr' : undeclared identifier and dont know whats wrong ?

4

1 に答える 1

5

この構文を使用する

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

cmdFuncPtrのメソッドへのポインタと同様cmdLineに、呼び出されるクラスのインスタンスである。が必要ですc。同時に、はのcmdFuncPtrメンバーでcmdListあるため、それが格納されているクラスのインスタンスである。が必要ですc.myCmdList[0]。そのためc、式で2回使用する必要があります。

OPによって提示される式は、次のように解析されます。「c.myCmdList[0]スタンドアロン変数に格納されているメソッドポインタを介して、クラスのインスタンスでメソッドを呼び出しますcmdFuncPtr」。そのような変数は存在しません、それはコンパイラが不平を言うことです。

于 2012-08-21T11:51:45.050 に答える