我正面临一个我不明白的错误。
我尝试创建并使用方法指针的静态数组。我班上的宣言如下:
static void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
初始化发生在我的.cpp文件中就是这样:
void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
麻烦来了,在我的一个Client类方法中,我尝试使用这个方法指针的数组。 我试过几种方法,例如:
(this->*packetHandler[_opcode])(data);
我说我不明白这个问题,让我解释一下原因。在我的代码上运行make会导致正确的编译,在连接时会出现问题。
client.cpp:71: undefined reference to `Client::packetHandler'
此消息重复5次。
欢迎任何帮助。 谢谢。
答案 0 :(得分:3)
void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
声明一个名为packetHandler
的全局变量。您想要定义类变量,这需要额外的Client::
,如下所示:
void (Client::*Client::packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
答案 1 :(得分:0)
Client::*packetHandler
是一个成员函数指针,指向名为Client::packetHandler
的成员函数。我不确定如何使成员函数指针指向一个你似乎想要做的任意成员函数。我认为乔治是对的。您应该考虑使用boost::function
或std::tr1::function
之类的东西,或者编写自己的成员函数包装类。