2012-03-05 1 views
3

최근에 Google V8을 Qt를 사용하는 MSVC2005 프로젝트에 추가 한 이후로 컴파일하지 못했습니다. 가 정의 V8의 token.h 예를 을 위해, 나에게 많은 문제를주는 선 TOKEN_LIST (T, T)이 오류 C2143를 산출내 프로젝트 (C2143, C2059, ..)에 V8을 추가 한 후에 컴파일 오류가 발생했습니다.

#define T(name, string, precedence) name, 
enum Value { 
TOKEN_LIST(T, T) 
NUM_TOKENS 
}; 

있다 ('}'가 누락 전에 '{') 또한 오류 C2059 (구문 오류 '{'), C2334 ('{'앞에 토큰, 보이는 함수 텍스트를 건너 뜁니다.). 이것은 몇 번 반복됩니다.

저는 SO와 Microsoft의 데이터베이스를 통해 검색했으며, 여러 가지를 테스트했습니다. 예를 들어/clr을 사용하여 Qt를 위반했습니다. 기존 정의를 제거하기 위해 "v8.h"파일을 포함하기 전에 #undef를 사용했습니다.

아무도 도와 드릴 수 있습니까? 이런 오류를 수정하는 표준 절차가 있습니까? 감사합니다. .

답변

2

#include <windows.h>이 있거나없는 token.h에 대해 생성 된 preprocessed code 사이의 차이점을 검색하여 충돌하는 매크로 정의를 찾을 수 있습니다.

예를 들어, "token.h"의 경우 오류는 enum Value의 정의에서 발생하므로 두 경우 모두 enum의 전처리 된 정의를 확인해야합니다.

#include <windows.h> 
    #include <token.h> 

에 그래서 당신이 얻을 :

enum Value { 
    ... 
    INSTANCEOF, , NOT, BIT_NOT, (0x00010000L), TYPEOF, void, BREAK, 
    ... 
    SWITCH, void, THROW, 
    ... 
    FUTURE_STRICT_RESERVED_WORD, const, EXPORT, 
    ... 
}; 

대신 :

enum Value { 
    ... 
    INSTANCEOF, IN, NOT, BIT_NOT, DELETE, TYPEOF, VOID, BREAK, 
    ... 
    SWITCH, THIS, THROW, 
    ... 
    FUTURE_STRICT_RESERVED_WORD, CONST, EXPORT, 
    ... 
}; 

#include <token.h>와.

+0

windows.h 포함을 명시 적으로 제거하려면 어떻게해야합니까? 나는 그것을 추가하지 않았고 그것은 token.h에 없다. 지식과 감사의 부족 나의 유감 죄송합니다. – Traveller

+0

@Traveller : 예를 들어'#include '과'#include '만으로 새로운 .cpp 파일을 만들고 전처리기를 통해 그 파일을 실행할 수 있습니다. – alexisdm

+0

감사합니다. 불행하게도 파일은 일치합니다. – Traveller