3

私が持っていると言う

class B{   //base class

}

class A : public B{ //derived class
}

クラスBへのポインタを返す関数もあります

B* returnB(){
    B * object = new A; //pointer of base class allocate object of derived class
    return object;
}

関数 B* へのポインターを作成しようとすると、エラーが発生します。

B* (*randomFunction)();
randomFunction = returnB;  

Visual Studio はコンパイルされません。

1   IntelliSense: a value of type "B*(MediaFactory::*)()" cannot be assigned to an entity of type "B*(*)()" c:\Users\...\mediafactory.cpp   35
4

2 に答える 2

2

MediaFactoryクラスのメンバー関数へのポインターを、非メンバー関数を保持できる変数に代入しようとしているようです。これらのエンティティには互換性がありません。ブーストを使用するbindか、関数ポインター変数をB* (MediaFactory::*)()型に変更してください。

于 2012-11-16T09:34:20.360 に答える
0

メンバーへのポインター関数を関数ポインターに割り当てています。

クラスのメソッドは、静的でない限り、異なるシグネチャと呼び出し方法を持っています。単純な関数宣言は、クラス表現 (例: implicit ) を考慮していませんthis

ここを参照してください: http://www.parashift.com/c++-faq/fnptr-vs-memfnptr-types.html

于 2012-11-16T09:34:14.033 に答える