最近,我偶然发现了另一个 C++ 问题,这让我很为难。假设我们有一个小程序:
class A {
public:
virtual bool c() = 0;
virtual bool b() = { return false; };
virtual ~A() {}
}
class B : public A {
public:
bool b() = { return true; };
~B() {}
}
...
void c(A *pointer) {
if (pointer->b()) {
cout << "Derived class";
}
}
在这种情况下,编译器会在方法 c() 的“if”行返回错误,并显示错误“成员访问不完整类型 A”。有人可以解释一下为什么编译器会返回这样的错误吗?如果触发异常确实是正确的,那么我该如何防止它呢?
非常感谢!