我已经声明了类:Another
和Klass
。Another
类仅在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/