【发布时间】:2011-09-22 19:53:46
【问题描述】:
我遇到了一个我不明白的错误。
我尝试创建和使用方法指针的静态数组。我班级的声明如下所示:
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 次。
欢迎任何帮助。 谢谢。
【问题讨论】:
-
静态变量是翻译单元的本地变量。也许出口会是有序的。
-
告诉你改用 boost::function 会不会太讨厌了?
-
我强烈推荐一些 typedef 来清理这个烂摊子。
-
头文件中是否存在几行?
-
@KerrekSB typedefs 会让那些更干净,但不是那么有趣。
标签: c++ pointers static static-array