最近,我偶然发现了另一个让我筋疲力尽的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”。有人可以解释一下为什么编译器会返回这样的错误吗?如果它确实是正确的触发异常,那么我该如何防止它呢?
非常感谢!
答案 0 :(得分:3)
“不完整类型A
”表示在您编译的代码中(但不是您发布的代码),在A
中使用之前没有c
的定义}。您需要在与c
相同的源文件中或在该源文件中包含的标头中定义。