今天在编译别的人写的代码时,出现 missing type specifier - int assumed. Note: C++ does not support default-int的错误。
在网上搜了一下,发现是头文件循环嵌套的问题。
之前一直以为用#ifndef就可以避免这种问题,今天才发现不行。
网上的解释是编译器在发现头文件之后会继续寻找该头文件包含的头文件,直到有一个头文件什么也没包含为止。不会理会#ifndef这个条件。所以如果循环包含,则必定导致错误。
解决的方法是,比如
a.h:
#include<b.h>
b.h:
//这里原本需要包含a.h,可以改成
class A;//声明a为一个外部类
classB
{
A *a;//记住,这里必须用指针,而不是对象,具体原因我还没弄清
....
}
//然后在b.cpp中添加a的头文件
#include<a.h>
b::b(){
a=new A();
}
这样就可以了。