方法指针的静态数组

Static array of method pointers

本文关键字:数组 静态 指针 方法      更新时间:2023-10-16

我遇到了一个我不明白的错误。

我尝试创建和使用方法指针的静态数组。我的类中的声明是这样的:

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会导致正确的编译,但链接时存在问题。
client.cpp:71: undefined reference to `Client::packetHandler'

此信息重复5次。

欢迎任何帮助。谢谢你。

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

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

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