我在我的项目中使用函数指针,但遇到了问题,创建了一个测试用例来展示它...以下代码在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;
不应该再次导致编译时错误吗?