1

我面临一个我不明白的错误。

我尝试创建和使用方法指针的静态数组。我班级的声明如下所示:

static void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);

初始化发生在我的 .cpp 文件中,如下所示:

void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);

麻烦来了,在我的客户的一个类方法中,我尝试使用这个方法指针的数组。我尝试了几种方法,例如:

(this->*packetHandler[_opcode])(data);

我说我不明白这个问题,让我解释一下原因。在我的代码上运行 make 会导致正确编译,tought,链接时出现问题。

client.cpp:71: undefined reference to `Client::packetHandler'

此消息重复 5 次。

欢迎任何帮助。谢谢你。

4

2 回答 2

3

void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);声明一个名为 的全局变量packetHandler。你想定义你的类变量,它需要一个额外的Client::像这样:

void (Client::*Client::packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
于 2011-09-22T20:33:09.097 回答
0

Client::*packetHandler是一个成员函数指针,指向名为 的成员函数Client::packetHandler。我不确定如何创建一个指向任意成员函数的成员函数指针,这似乎是您想要做的。我认为乔治是对的。您应该考虑使用类似boost::functionstd::tr1::function编写自己的成员函数包装类的东西。

于 2011-09-22T20:12:26.583 回答