我已经声明了类:AnotherKlassAnother类仅在another.hpp中定义,Klass类在klass.hpp中声明,并在klass.cpp中定义。

我在another.hpp中包括了klass.cpp,并在Another中包括了前向声明的类klass.hpp

// 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的部分分类(即,它与一个类有关)。它没有提供创建完整声明的所有详细信息(例如,没有提供推断其大小的详细信息)。

因此,上面的Another是不完整的类型,其大小对于编译器是未知的。因此,不能通过从不完整的类型Klass继承来提供Another类的定义。如果可以,那么Klass的大小应该是多少?

关于c++ - 如何从已经预先声明的类继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58778035/

10-12 04:36