我有以下情况:
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{};
是否有可能摆脱#include "class_b.hpp"
中的class_a.hpp
?既然只是宣言,为什么我不能只使用前瞻声明而不包括它? (我试过,但没有编译)
当然,我已在class_b.hpp
中添加了class_a.cpp
。
答案 0 :(得分:9)
由于$("#source-table").html( table );
需要存储在class_b
内而没有任何间接(例如指针),因此在声明期间需要知道class_a
的大小class_b
。为了知道大小,需要提供class_a
的声明:因此需要class_b
指令。
答案 1 :(得分:3)
为什么我不能只使用前瞻声明而不包括它?
只有前向声明,类类型class_b
将为incomplete type。但是要声明为非静态类数据成员,需要它是完整的,必须知道它的大小和布局。
以下任何一种情况都要求完成课程
T
:... declaration of a non-static class data member of type `T`; ...
(一般情况下,必须知道
T
的大小和布局。)