如何从已向前声明的 class 继承
How to inherit from a class that has been declared forwardly
我已声明 classes:Another
和 Klass
。
class Another
仅在another.hpp
中定义,class Klass
在klass.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
的大小应该是多少?
我已声明 classes:Another
和 Klass
。
class Another
仅在another.hpp
中定义,class Klass
在klass.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
的大小应该是多少?