私は自分のプロジェクトで関数ポインターを使用していますが、問題に直面しており、それを示すテストケースを作成しています...以下のコードは、MSVC2005 で以下のエラーで失敗します (簡単に言えば、基本クラス関数ポインターを介して派生クラス関数にアクセスしたい)
エラー C2440: '=': 'void (__thiscall ClassB::* )(void)' から 'ClassAFoo' に変換できません
class ClassA {
public:
virtual void foo()
{
printf("Foo Parent");
}
};
typedef void (ClassA::*ClassAFoo)();
class ClassB : public ClassA {
public:
virtual void foo()
{
printf("Foo Derived");
}
};
int main() {
ClassAFoo fPtr;
fPtr = &ClassB::foo;
}
私の質問は
- 基本クラスの関数ポインタを介して派生クラス関数にアクセスできないのは C++ の動作ですか、それともコンパイラのバグですか?
- 上記のケースで遊んでいます。コメントアウトする
ClassB::foo
と、このコードはそれ以上変更せずに正常にコンパイルされます。なぜそうなのか、fPtr = &ClassB::foo;
再びコンパイル時エラーが発生することはありませんか?