如何从 C++ 中的不完整 class 派生

How to derive from incomplete class in C++

我有 3 个 classes:ContextAB

B 应继承自 A,并且应在其方法中使用 ContextA

A 是一个摘要 class。 AContext 依赖 class 具有前向声明的 headers.

Context中的代码:

#pragma once
#include "A.h"

class A;

class Context {
    ...
    A* someMethod();

};

A中的代码:

#pragma once
#include "Context.h"

class Context;

class A {
    ...
    Context* someOtherMethod();
    ...
};

这工作正常,但是当我尝试添加 class B 时,出现了很多错误:

#pragma once
#include "A.h"

// class A; // with this definition also have errors

class B : public A {
    A* method(Context* context) { ... };
};

error: invalid use of incomplete type ‘class A’

error: expected ‘;’ at end of member declaration

我做错了什么?是否可以这样写 class B 这样问题就消失了?事实上,该程序应该有许多 class 继承自 class A

如果您有前向声明,那么您通常不需要包含指定的 header。

Context.h 不应包括 A.h,显然 A.h 也不应包括 Context.h.

由于 B 实际上直接使用 A class(您不能从不完整的 class 派生),因此需要包含 A.h

Context中的代码:

#pragma once

class A; //pointers do not require an include

class Context {
    ...
    A* someMethod();

};

A中的代码:

#pragma once

class Context; //pointers do not require an include

class A {
    ...
    Context* someOtherMethod();
    ...
};

B中的代码:

#pragma once
#include "A.h" //inheritance requires include

class B : public A {
    A* method(Context* context) { ... };
};