-1

我有这样的情况

#ifndef _CLASSA
#define _CLASSA
class B;

class A {
    virtual void addTo(B*) {}
};

#endif

溴化氢

#ifndef _CLASSB
#define _CLASSB

#include "A.h"

class B : public A {
    B();
    void addTo(B* b) {
         // blah blah blah
    }
};

#endif

B.cpp

#include "B.h"

B::B() : A() {}

主文件

#include "B.h"

int main() {
    A* b = new B();
    B* d = new B();
    b->addTo(d);
}

该项目将无法编译。如果我在 A 标头中转发声明 B,编译器会抱怨 Bh 中的类的期望 如果我在 Ah 中包含 Bh 标头,编译器将无法解析基类。这可能吗?

4

1 回答 1

2

是的,包含A.hinB.h并转发声明Bin A.h

如果我在 A 标头中转发声明 B,编译器会抱怨 Bh 中的类的期望

您现在拥有代码的方式应该可以工作。但我怀疑您实际上是B在 method 内部使用addTo,在这种情况下,前向声明是不够的。您需要将实现分离到一个实现文件并包含B在其中。

编辑:正如 DeadMg 所指出的,class B : class A {这不是有效的语法,你可能想要class B : Aor class B : public A

于 2012-07-03T15:53:39.607 回答