2011-09-22 64 views
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会导致正确的编译,如果连接的话会出现问题。

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

该消息重复5次。

任何帮助将受到欢迎。 谢谢。

+0

静态属于您的翻译单元。也许出口将是有序的。 –

+2

它会太令人讨厌,告诉你使用boost :: function来代替吗? –

+5

我会强烈建议一些typedefs来清除这个混乱。 –

回答

3

void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);声明了一个名为packetHandler的全局变量。您想要定义您的类变量,需要额外的Client::,如下所示:

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

哈哈谢谢尼尔。在@thekashyap评论之后,我正在想这样的事情。我尝试了'void(Client :: Client :: * packetHandler [Op :: handledOpcodeMax-Op :: handledOpcodeMin + 1])(QByteArray &data);'。*'''D:Thanks :) :) – Xaqq

+0

Kerrek SB的评论abt typedefing有多重要.. :) – Kashyap

0

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

+0

要使函数指针指向任何成员函数都是简单的,特别要做的。我的问题在于,我希望这个数组成为我的类的静态元素。除去头文件中的'static'关键字使编译和链接工作。 – Xaqq