Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法编译boost spirit example4.cpp_C++_Boost_Boost Spirit_Boost Spirit Qi_Boost Spirit Lex - Fatal编程技术网

C++ 无法编译boost spirit example4.cpp

C++ 无法编译boost spirit example4.cpp,c++,boost,boost-spirit,boost-spirit-qi,boost-spirit-lex,C++,Boost,Boost Spirit,Boost Spirit Qi,Boost Spirit Lex,我正在继续学习Boost Spirit库,我对无法编译的示例存在一些问题。您可以在此处找到示例的来源:。您还可以查看此代码并在上编译结果 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间boost::spirit; 使用boost::phoenix::val; /////////////////////////////////////////////////////////////////////////////// //令牌定义 //////////////////////

我正在继续学习Boost Spirit库,我对无法编译的示例存在一些问题。您可以在此处找到示例的来源:。您还可以查看此代码并在上编译结果

#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间boost::spirit;
使用boost::phoenix::val;
///////////////////////////////////////////////////////////////////////////////
//令牌定义
///////////////////////////////////////////////////////////////////////////////
模板
结构示例4_标记:lex::lexer
{
示例4_代币()
{
identifier=“[a-zA-Z][a-zA-Z0-9\]*”;
常量=“[0-9]+”;
if=“if”;
else=“else”;
while=“while”;
this->self=lex::token_def(“(”)|“)”|“{”|“}”|“=”|“;”|常量;
这个->self+=if | else | while |标识符;
这个->自我(“WS”)
=lex::token_def(“[\\t\\n]+”)
|   "\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\/"
;
}
标记定义if,else,while;
lex::token_def标识符;
lex::token_def常量;
//]
};
模板
结构示例4\u语法
:qi::语法
{
模板
示例4_语法(TokenDef const&tok)
:示例4语法::基本类型(程序)
{
使用boost::spirit::\u val;
节目
=+块
;
块
='{'>>*语句>>'}'
;
陈述
=分配
|如果
|而
;
分配
=(tok.identifier>>'='>>表达式>>';')
[
std::cout>表达式>>')'>>块
>>-(tok.else>>块)
)
[
std::cout>表达式>>')'>>块)
[

std::cout正如Fsmv所述,应添加以下
define

#define BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT

之后,可以编译这个示例。

我不完全确定,但尝试添加
\define BOOST\U VARIANT\U USE\U RELAXED\U GET\U默认情况下
真正重要的错误部分是
/usr/local/include/BOOST/VARIANT/GET。hpp:229:5:错误:静态断言失败:BOOST::VARIANT不包含指定的类型U,调用BOOST::GET(const boost::variant&)将始终抛出boost::bad_get exception
您完全正确。当我添加此define时,示例可以编译。
#define BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT