我遇到了一个奇怪的情况。我的理解是,如果我已将#ifndef #define #endif标志放入所有.h文件,那么包含头文件的顺序并不重要。预期' - '标记之前的非限定标识
旧代码 A.H
#ifndef A_H
#define A_H
blah blah blah
#endif
a.cc
#include "a.h"
blah blah blah
而且上面的代码工作得很好。
现在我添加了一个新的头b.h
b.h
#ifndef B_H
#define B_H
blah blah blah
#endif
新a.cc
#include "a.h"
#include "b.h"
blah blah blah
以上a.cc编译OK。但是,如果我改变a.cc到
新a.cc版本2
#include "b.h"
#include "a.h"
blah blah blah
编译失败,错误:之前的预期不合格的ID“ - ”标记。
对不起,我不能在一个小例子中重现相同的错误。编译错误导致了一个大项目。如果我在上面创建的一个小例子中进行测试。它编译,但如果我切换回该项目。 #include指令顺序很重要。我不知道这个问题可能发生在哪里。任何人都可以给我一个线索将是很有帮助的。 在此先感谢
[已解决] 我已经自己解决了这个问题。然而我认为也可能有其他人也会坚持下去。造成这个问题的原因是类似以下
在test.cc
const int var_undef = -1;
#define var_undef (-1)
它编译,而如果换成这两条线路
#define var_undef (-1)
const int var_undef = -1
它编译预计unqualified-错误正如我所述,在' - '标记之前的标识。
'#include'本质上只是一个复制粘贴过程,所以包含顺序可能很重要。请工作来制作一个最小的测试用例,否则我们不能提供更多的帮助。 – 2012-03-19 11:49:10
头文件包含顺序无关紧要,除非你在相互混合的东西 – 2012-03-19 11:50:18
如果头文件包含'#define'宏,或者在'b.h'的末尾有一些错误,那么顺序*就会*重要。或许缺少';'或'}'? – 2012-03-19 11:51:14