具有前向声明的相互依赖的 .h 文件

Co-Dependent .h files with forward declaration

我在不同的 .h 文件中有 3 个 类(A、B 和 C)。我怎样才能移动 #includes 和前向声明以使其编译。

目前我在 A.h 中使用了前向声明,并认为它可以从那里开始工作。相反 C.h 抛出许多 'class A' is inaccessible with in this context 的编译器错误。

// A.h
#pragma once

...

class B;

class A {
  private:
    B *parent_;
};
// B.h
#pragma once

...

#include <A.h>

class B : A {
  public:
    virtual void func(A *arg);
};
// C.h
#pragma once

...

#include <A.h>
#include <B.h>

class C : B {
  public:
    virtual void func(A *arg);

  private:
    A *left_child;
    A *right_child;
};

名称 A 通过 B 是私有的。您可以在 B 中更改为 public 或保护继承,或者在 C

中使用(完全限定名称)::A