2012-03-05 4 views
3

最近Qtを使っているMSVC2005プロジェクトにGoogleのV8を追加して以来、私はそれをコンパイルできませんでした。 定義は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

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, 
    ... 
}; 

の代わり:

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 'という2行だけで新しい.cppファイルを作成し、そのファイルをプリプロセッサで実行することができます。 – alexisdm

+0

ありがとうございます。残念ながら、ファイルは一致します。 – Traveller

関連する問題