1

理解できないエラーに直面しています。

メソッドポインタの静的配列を作成して使用しようとしています。私のクラスの宣言は次のようになります。

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

私の.cppファイルで初期化は次のように行われます。

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

ここに問題があります。私のクライアントのクラスメソッドの1つで、このメソッドポインタの配列を使用しようとしています。私はいくつかの方法を試しました、例えば:

(this->*packetHandler[_opcode])(data);

私は問題を理解していないと言いました、理由を説明させてください。私のコードでmakeを実行すると、適切にコンパイルされます。リンク時に問題が発生します。

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

このメッセージは5回繰り返されます。

どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

3

void (Client::*packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);。という名前のグローバル変数を宣言しますpacketHandler。クラス変数を定義したいのですが、次のClient::ような追加が必要です。

void (Client::*Client::packetHandler[Op::handledOpcodeMax - Op::handledOpcodeMin + 1])(QByteArray &data);
于 2011-09-22T20:33:09.097 に答える
0

Client::*packetHandlerは、という名前のメンバー関数を指すメンバー関数ポインターですClient::packetHandler。あなたがやりたいと思われる任意のメンバー関数を指すメンバー関数ポインターを作成する方法がわかりません。ジョージは正しいと思います。boost::functionまたはのようなものを使用することを検討するかstd::tr1::function、独自のメンバー関数ラッパークラスを作成する必要があります。

于 2011-09-22T20:12:26.583 に答える