이상한 상황에 처했습니다. 필자는 #ifndef #define #endif 플래그를 모든 .h 파일에 넣으면 include 헤더 파일의 순서가 중요하지 않다는 것을 이해합니다.'-'토큰 앞에 unqualified-id가 필요합니다.
오래된 코드 a.h
#ifndef A_H
#define A_H
blah blah blah
#endif
a.cc는
#include "a.h"
blah blah blah
그리고 코드 위
괜찮 았는데. 는 지금은#ifndef B_H
#define B_H
blah blah blah
#endif
새로운 a.cc
#include "a.h"
#include "b.h"
blah blah blah
확인을 컴파일 위의 a.cc b.h
b.h 새로운 헤더를 추가했다. 그러나 나는
새로운 a.cc 버전 오류로 인해 실패 컴파일이
#include "b.h"
#include "a.h"
blah blah blah
에 a.cc을 변경하는 경우 : 이전에 자격이-ID 기대 '-'토큰.
죄송합니다. 아주 작은 예제에서는 같은 오류를 재현 할 수 없습니다. 컴파일 오류로 큰 프로젝트가 발생했습니다. 그리고 위와 같이 만든 작은 예제로 테스트 해 보았습니다. 컴파일되었지만 프로젝트로 다시 전환하면됩니다. #include 지시어 순서는 중요합니다. 이 문제가 발생할 수있는 곳을 모르겠습니다. 아무도 내게 실마리를 줄 수있어 많은 도움이 될 것입니다. 미리 감사드립니다.
[해결] 나는 혼자서 문제를 해결했습니다. 그러나 나는 다른 사람들도 그것에 붙어 있을지도 모른다고 생각한다. 문제가 발생하는 이유는 test.cc에 다음
같았다
const int var_undef = -1;
#define var_undef (-1)
이 두 라인을 바꿀 경우 동안 그것은, 컴파일
#define var_undef (-1)
const int var_undef = -1
그것은 unqualified- 예상 오류와 함께 컴파일 내가 말했듯이 '-'토큰 앞의 id.
'#include '는 본질적으로 복사 - 붙여 넣기 프로세스이므로 포함 순서가 중요 할 수 있습니다. 최소의 테스트 케이스를 작성하도록 노력하십시오. 그렇지 않으면 더 이상 도움을 드릴 수 없습니다. –
헤더 파일 포함 순서는 중요하지 않습니다. –
헤더가'# define' 매크로를 포함하거나'b.h '의 끝에 오류가있는 경우 *는 * 중요합니다. 아마도';'또는'}'가 누락 되었습니까? –