使用Visual Studio编译boost :: spirit

时间:2015-03-11 20:26:43

标签: c++ c++11 boost

我正在尝试使用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语法

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可能开始支持事物的其他功能)