今天用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比较保险。