头文循环引用问题
事情的经过是这样的,有两个头文件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;
};
浙公网安备 33010602011771号