如何从已向前声明的 class 继承

How to inherit from a class that has been declared forwardly

我已声明 classes:AnotherKlass。 class Another仅在another.hpp中定义,class Klassklass.hpp中声明并在klass.cpp中定义。

我在 klass.cpp 中包含 another.hpp 并在 klass.hpp 中转发声明 class Another

// klass.cpp
#include "klass.hpp"
#include "another.hpp"

Klass::Klass()
{

}

// klass.hpp
#pragma once

class Another;

class Klass : public Another
{
public:
    Klass();
};

// another.hpp
#pragma once

class Another
{
protected:
    int a;
    char b;
};

在你的文件中 klass.hpp:

#pragma once

class Another;

class Klass : public Another
{
public:
    Klass();
};

class Another; 是前向声明:它只是将名称 Another 引入 C++ 作用域。此前向声明仅包含名称 Another 的部分 class 化(即,它是关于 class 的)。它没有提供创建完整声明的所有详细信息(例如,它没有提供推断其大小的详细信息)。

因此,上面的 Another 是一个 不完整的类型 ,编译器不知道它的大小。因此,您不能通过继承 Another 来提供 class Klass 的定义,这是一种不完整的类型。如果可以,那么 Klass 的大小应该是多少?