我已经声明了类: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
的大小应该是多少?。