前向声明与include

今天用QT莫名其妙产生was not declare错误..但是我很确定已经include了头文件。

        然后从网上各种查找,最后加一个前向声明解决了这个问题。至于为什么解决的,还是没发现... ...

    前向声明仅仅是一个声明,它的好处就是去除了include的时候,有可能给编译器带来的工作量。

用处为:

1.可以用于定义指向这个类型的指针或引用。

2. 用于声明(不是定义)使用该类型作为形参或者返回类型的函数。

当我们在定义一个类的时候,很多情况下会和别的类耦合。如:

//a.h

#include "b.h"

class B;

class A

{

public:

A{}

~A{}

private:

B b;

};

其中B类的对象b,如果B的源文件改变,则会导致整个a.h在a.cpp中重新编译。

如果改成指针类型则不会有这种情况发生,因为指针实质上只需记录一个地址。而c++编译器做的事情主要是:1.扫描符号;2.确定对象大小。

改为

//a.h

class A

{

public:

A{}

~A{}

private:

B* b;

};

改成这样以后,如果需要用到B的实例,则需要在a.cpp中#include "b.h"(如果只需用到指针或是引用,或是函数形参和返回类型则不用)。

如此,若B源文件改变,则不会重新编译a.h

当然,如果项目较小,而且对指针的应用不是很熟练的话,还是建议用include比较保险。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值