方法指针的静态数组
Static array of method pointers
我遇到了一个我不明白的错误。
我尝试创建和使用方法指针的静态数组。我的类中的声明是这样的:
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::function
或std::tr1::function
之类的东西,或者编写自己的成员函数包装类。
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++函数中声明静态 2D 数组?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 基于字节数组生成静态范围整数值
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- C++访问静态 constexpr 数组
- 初始化类中的静态 const 数组 - C++
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 动态分配的数组和静态数组之间的区别
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 如何在静态函数中使用成员函数数组
- 具有大的2d数组:静态int与int