当只有声明存在时不包括 class header
Don't including class header when only declaration exists
我有以下情况:
class_a.hpp:
#include "class_b.hpp" // is this "include" mandatory?
class class_a{
private:
class_b b;
};
class_a.cpp:
#include "class_b.hpp"
//code that uses member variables and functions from class_b
class_b.hpp:
class class_b{};
是否可以去掉class_a.hpp
中的#include "class_b.hpp"
?既然只是声明,为什么我不能只使用前向声明而不包括它呢? (我试了但是没有编译)
当然我在 class_a.cpp
中包含了 class_b.hpp
。
由于 class_b
需要存储在 class_a
中而没有任何间接 (例如指针),class_b
的大小需要在 class_a
的声明期间被知道。为了知道大小,class_b
的声明需要可用:因此需要 #include
指令。
why I can not just use forward declaration and not including it?
只有前向声明 class 类型 class_b
将是 incomplete type。但是要声明为非静态class数据成员,需要它是完整的,它的大小和布局必须知道。
Any of the following contexts requires class T
to be complete:
...
declaration of a non-static class data member of type `T`;
...
(In general, when the size and layout of T
must be known.)
我有以下情况:
class_a.hpp:
#include "class_b.hpp" // is this "include" mandatory?
class class_a{
private:
class_b b;
};
class_a.cpp:
#include "class_b.hpp"
//code that uses member variables and functions from class_b
class_b.hpp:
class class_b{};
是否可以去掉class_a.hpp
中的#include "class_b.hpp"
?既然只是声明,为什么我不能只使用前向声明而不包括它呢? (我试了但是没有编译)
当然我在 class_a.cpp
中包含了 class_b.hpp
。
由于 class_b
需要存储在 class_a
中而没有任何间接 (例如指针),class_b
的大小需要在 class_a
的声明期间被知道。为了知道大小,class_b
的声明需要可用:因此需要 #include
指令。
why I can not just use forward declaration and not including it?
只有前向声明 class 类型 class_b
将是 incomplete type。但是要声明为非静态class数据成员,需要它是完整的,它的大小和布局必须知道。
Any of the following contexts requires class
T
to be complete:... declaration of a non-static class data member of type `T`; ...
(In general, when the size and layout of
T
must be known.)