Ошибки компиляции после добавления V8 в мой проект (C2143, C2059, ..) - PullRequest
3 голосов
/ 05 марта 2012

Я недавно добавил Google V8 в проект MSVC2005, который также использует Qt, и с тех пор я не смог его скомпилировать. Определения дают мне много проблем, например в токене V8 есть

#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. Я также использовал #undef перед тем, как включить файл "v8.h" для удаления существующих определений.

Может кто-нибудь помочь с этим? Существует ли стандартная процедура для исправления таких ошибок? Спасибо.

1 Ответ

2 голосов
/ 05 марта 2012

Вы можете найти конфликтующие определения макросов, выполнив поиск различий между предварительно обработанным кодом , сгенерированным для token.h, с #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>.

...