仅存在声明时不包括类标题

时间:2016-08-18 07:43:47

标签: c++ c++11 include declaration forward-declaration

我有以下情况:

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

2 个答案:

答案 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的大小和布局。)