1

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

非常感谢!

4

1 回答 1

3

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

于 2013-10-07T12:04:23.367 回答