指向虚拟类的指针

Pointers to virtual classes

本文关键字:指针 虚拟      更新时间:2023-10-16

最近,我偶然发现了另一个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"。有人可以解释为什么编译器返回这样的错误吗?如果触发异常确实是正确的,那么我该如何防止它?

非常感谢!

"

不完整的类型A"意味着在你正在编译的代码(但不是你发布的代码)中,在c中使用之前没有A的定义。您将需要定义与c相同的源文件中,或者位于该源文件中包含的标头中。