2

私が持っている場合:

class MyClass {
 ...... my code....
private:
 void myFunction(int p);

}

in cpp file:

MyClass::MyClass() {

void (*pointer)(int);
pointer = &myFunction;

}

MyClass::myFunction(int p) {
//.... my code .... //
}

これは可能ですか?割り当ての問題があります:

cannot convert 'void(MyClass::*)(int)' to 'void (*)(int)' in assignment
4

3 に答える 3

3

次のようなポインター型を typedef する必要があります。

typedef void (MyClass::*FnPointer)(int);

次のようなその型のポインターを作成します。

FnPointer pnt = &MyClass::myFunction;

関数は次のように呼び出すことができます。

MyClass obj;
(obj.*pnt)( 3 );

OP が目的を持っているのか、単にプレイしているだけなのかはわかりませんが、このアプローチはコールバックまたはデリゲートを作成するのに役立ちます。構造体は、クラスのインスタンスへの参照またはポインター、およびそのクラスのメンバー関数へのポインターを保持し、初期化されます。

参照: C++ デリゲートとは?

于 2013-06-26T14:44:02.507 に答える
0

実際、エラー メッセージは、何が問題なのかを示すのに非常に役立ちます。関数ポインタを宣言しましたが、メソッドポインタを宣言する必要があります。

typedef void (*pointer)(int);クラスの宣言を試してから、 で型を参照してくださいMyClass::pointer

于 2013-06-26T14:37:53.417 に答える