gpt4 book ai didi

c++ - 指向方法的指针

转载 作者:行者123 更新时间:2023-11-30 01:25:38 25 4
gpt4 key购买 nike

有人知道如何在 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 提供的表达式解析为:“通过存储在独立变量 c.myCmdList[0] 中的方法指针在 cmdFuncPtr 中的类实例上调用方法”。这样的变量不存在,这就是编译器所提示的。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com