2012-03-05 66 views
3

我最近將Google的V8添加到MSVC2005項目中,該項目也在使用Qt,因此我一直無法編譯它。 的定義是給我很多問題,例如在 V8的token.h有在將V8添加到我的項目(C2143,C2059,..)後編譯錯誤

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

線TOKEN_LIST(T,T)產生錯誤C2143( '}' 丟失之前 '{') ,還出錯C2059(語法錯誤'{'),還有C2334('{';可見功能文本被跳過之前的令牌)。這會重複幾次。

我已經通過SO和Microsoft數據庫進行了搜索,並測試了各種各樣的東西,例如使用/ clr打破了Qt。在包含「v8.h」文件之前,我還使用了#undef來刪除可能存在的定義。

任何人都可以幫忙嗎?有沒有一個標準的程序來解決這樣的錯誤? 謝謝。

回答

2

您可以通過搜索生成的token.h生成的preprocessed code與使用和不使用#include <windows.h>之間的差異來找到衝突的宏定義。

例如,對於「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, 
    ... 
}; 

:只有#include <token.h>

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

+0

我該如何顯式刪除windows.h include?我沒有添加它,它不在token.h中。對不起,我缺乏知識和感謝。 – Traveller 2012-03-05 18:15:07

+0

@Traveller:例如你可以創建一個新的.cpp文件,只有兩行'#include '和'#include ',並通過預處理器運行該文件。 – alexisdm 2012-03-05 18:22:47

+0

謝謝。不幸的是文件匹配。 – Traveller 2012-03-05 18:31:12

相關問題