Я столкнулся с ошибкой, которую я не понимаю.
Я пытаюсь создать и использовать статический массив указателей на методы. Объявление в моем классе выглядит так:
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 раз.
Любая помощь приветствуется. Спасибо.
static void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
находится в моем заголовочном файле. @George Джордж Ну да, потому что я хочу сделать это самостоятельно (в целях обучения): P. @Kerrek Может быть, позже мне нужно четко понять, что происходит: D. @Mellowcandle Ну, первая строка принадлежит client.hpp - person Xaqq   schedule 23.09.2011(this->*packetHandler[_opcode])(data);
наmyvar(data);
, а затем посмотреть, где ошибка. - person Kashyap   schedule 23.09.2011void (Client::*ptr)(QByteArray &); ptr = packetHandler[_opcode];
Это дает мнеundefined reference to Client::packetHandler'.
Я предполагаю, что проблема связана с инициализацией массива, я имею в виду, кажется, чтоvoid (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
не делает массив статическим членом клиентского класса. Или что-то вроде этого. - person Xaqq   schedule 23.09.2011