我最近将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来删除可能存在的定义。
任何人都可以帮忙吗?是否有一个标准程序来修复这样的错误? 感谢。
答案 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>
。