我正在尝试使用Visual Studio 2013更新4来编译boost的精神版本1.57。以下简单程序会产生许多错误和警告。
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
int main()
{return 0;}
发生了什么事?
编译器命令行具有以下选项:
/ GS / W3 / Zc:wchar_t / Zi / Gm / Od / sdl /Fd"x64\Debug\vc120.pdb“/ fp:precise / D”WIN32“/ D”_DEBUG“/ D”_CONSOLE“/ D“_LIB”/ D“_UNICODE”/ D“UNICODE”/ errorReport:提示/ WX- / Zc:forScope / RTC1 / Gd / MTd / Fa“x64 \ Debug \”/ EHsc / nologo / Za / Fo“x64 \ Debug \“/ Fp"x64\Debug\Grammar.pch”
最常见的警告是
警告1警告C4180:应用于函数类型的限定符没有意义;忽略X:.libraries \ boost \ boost \ proto \ transform \ detail \ preprocessed \ pass_through_impl.hpp 40 1语法
和
警告79警告C4224:使用非标准扩展名:形式参数'expr'先前被定义为类型X:.libraries \ boost \ boost \ proto \ debug.hpp 126 1语法
有些错误是:
错误195错误C2146:语法错误:在标识符'expr_param'之前缺少','X:.libraries \ boost \ boost \ proto \ transform \ arg.hpp 179 1语法 错误196错误C2065:'expr_param':未声明的标识符X:.libraries \ boost \ boost \ proto \ transform \ arg.hpp 179 1语法 错误197错误C2977:'boost :: proto :: result_of :: value':模板参数太多X:.libraries \ boost \ boost \ proto \ transform \ arg.hpp 179 1语法 错误198错误C2955:'boost :: proto :: result_of :: value':使用类模板需要模板参数列表X:.libraries \ boost \ boost \ proto \ transform \ arg.hpp 179 1语法 错误199错误C2061:语法错误:标识符'expr_param'X:.libraries \ boost \ boost \ proto \ transform \ arg.hpp 182 1语法 错误200错误C2061:语法错误:标识符'expr_param'X:.libraries \ boost \ boost \ proto \ transform \ detail \ preprocessed \ make.hpp 69 1语法 错误201错误C2061:语法错误:标识符'expr_param'X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 73 1语法 错误202错误C2146:语法错误:缺少';'在标识符'type'X之前:.libraries \ boost \ boost \ proto \ detail \ preprocessed \ poly_function_funop.hpp 14 1语法 错误203错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int X:.libraries \ boost \ boost \ proto \ detail \ preprocessed \ poly_function_funop.hpp 14 1语法 错误204错误C2039:'type':不是'boost :: tr1_result_of(Env)&gt;'的成员X:.libraries \ boost \ boost \ proto \ transform \ env.hpp 367 1语法 错误205错误C2504:'type':基类未定义X:.libraries \ boost \ boost \ proto \ transform \ env.hpp 368 1语法 错误206错误C2039:'value':不是'boost :: proto :: result_of :: has_env_var'的成员X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 189 1语法 错误207错误C2975:'C':'boost :: mpl :: eval_if_c'的模板参数无效,预期编译时常量表达式X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 192 1语法 错误208错误C2039:'type':不是'boost :: mpl :: eval_if_c,boost :: proto :: result_of :: env_var&gt;'的成员X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 192 1语法 错误209错误C2146:语法错误:在标识符'type'之前缺少','X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 193 1语法 错误210错误C2065:'type':未声明的标识符X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 193 1语法 错误211错误C2977:'boost :: remove_reference':模板参数太多X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 193 1语法 错误212错误C2955:'boost :: remove_reference':使用类模板需要模板参数列表X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 193 1语法 错误213错误C1903:无法从先前的错误中恢复;停止编译X:.libraries \ boost \ boost \ proto \ transform \ when.hpp 194 1语法
答案 0 :(得分:0)
尝试使用
#define BOOST_SPIRIT_USE_PHOENIX_V3
和其中一个
#define BOOST_RESULT_OF_USE_DECLTYPE // or
#define BOOST_RESULT_OF_USE_TR1 // or
#define BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
注意在首次加入任何提升标头之前定义这些内容至关重要。这包括任何
stdafx.h
如果你有一个
如果任何组合成功,请在spirit-general邮件列表或Boost Trac上报告错误。它可能是一个缺少/不适当的编译器功能检测事物(我对constexpr
感到疑惑,或者MSVC可能开始支持事物的其他功能)