将V8添加到项目后编译错误(C2143,C2059,..)

时间:2012-03-05 13:58:39

标签: c++ visual-studio qt visual-studio-2005 v8

我最近将Google的V8添加到MSVC2005项目中,该项目也使用Qt,我从那时起就无法编译它。 例如,定义给了我很多问题 在V8的token.h中有

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

TOKEN_LIST(T,T)行在'{'之前产生错误C2143('}',错误C2059(语法错误'{'),也是C2334('{'之前的标记;可见函数文本是跳过)。这种情况重复了几次。

我搜索过SO并通过微软的数据库测试了各种各样的东西,例如使用/ clr打破了Qt。在包含“v8.h”文件之前,我还使用了#undef来删除可能存在的定义。

任何人都可以帮忙吗?是否有一个标准程序来修复这样的错误? 感谢。

1 个答案:

答案 0 :(得分: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>