头文循环引用问题

事情的经过是这样的,有两个头文件a.h, b.h。在b.h中声明了一个class A,然后需要在a.h中使用b.h中的class A。

一般只在a.h中加一句#include "b.H"就可以了,但是如果一时脑残在b.h里也加了一句#include "a.h"的话,就会报错unkonwn typename 'A'

而且报错的位置是在a.h中使用A的位置报这个错。然后就使劲看a.h死活找不到错。。。

 

原因是这样的,其实出错的位置在b.h的#include "a.h"的位置,在预处理程序处理#include "a.h"的时候,直接将a.h的内容添加到b.h的头部,就导致了在文件b.h的开头出所添加的a.h中的内容使用了之后才声明的class A。所以会报unkonwn typename的错误,所以把这句一时脑抽加上的#include "a.h"删掉就可以了

 

总结就是,很多奇葩错误都是一些比如忘写分号,大括号,写错函数名,头文件循环引用的问题造成的。。头文件保护的作用其实是非常有限的,如果一定得循环引用,直接在使用之前显示声明一次就可以,比如说烂了的这段:

class B;

class A {

  B x;

};

class B {

  A x;

};

posted on 2015-05-02 23:38  远近闻名的学渣  阅读(167)  评论(0)    收藏  举报

导航