Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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规则?_C++_Boost Spirit_Boost Spirit Qi - Fatal编程技术网

C++ 如何向前声明boost::spirit规则?

C++ 如何向前声明boost::spirit规则?,c++,boost-spirit,boost-spirit-qi,C++,Boost Spirit,Boost Spirit Qi,下面是一个非常简单的boost::spirit示例,演示了我遇到的一个问题-当我编译它时,我得到了'parsers::parseTest':重新定义;多次初始化-如何前向声明规则?如果有必要,请使用2.5.2 #include <boost/fusion/adapted/struct/adapt_struct.hpp> #include <boost/fusion/include/adapt_struct.hpp> #include <boost/fusion/ad

下面是一个非常简单的
boost::spirit
示例,演示了我遇到的一个问题-当我编译它时,我得到了
'parsers::parseTest':重新定义;多次初始化
-如何前向声明规则?如果有必要,请使用
2.5.2

#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
#include <string>

struct test
{
    int a;
    int b;
};

BOOST_FUSION_ADAPT_STRUCT(test, a,b)


namespace parsers
{
    typedef std::string::const_iterator it;
    using namespace boost::spirit::qi;
    const rule<it, test()> parseTest;
}

namespace parsers
{
    typedef std::string::const_iterator it;
    using namespace boost::spirit::qi;
    const rule<it, test()> parseTest = int_ >> ',' >> int_;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构测试
{
INTA;
int b;
};
增强融合适应结构(测试,a,b)
名称空间分析器
{
typedef std::string::const_迭代器it;
使用名称空间boost::spirit::qi;
常量规则解析测试;
}
名称空间分析器
{
typedef std::string::const_迭代器it;
使用名称空间boost::spirit::qi;
常量规则parseTest=int_>>,'>>int;
}

常量声明
常量规则解析测试
也是它的定义,在这段代码中,它使用默认构造函数来初始化它。省略那行就行了

或者,如果要在另一个源文件中使用初始值设定项提供
parseTest
定义,则必须将
const
声明为
extern
,因为全局和命名空间范围中的
const
意味着内部链接(
static

/.h
名称空间分析器{
外部常量规则解析测试;
}
//.cc
常量规则解析器::parseTest=int_>>,'>>int;

常量声明
常量规则解析测试
也是它的定义,在这段代码中,它使用默认构造函数来初始化它。省略那行就行了

或者,如果要在另一个源文件中使用初始值设定项提供
parseTest
定义,则必须将
const
声明为
extern
,因为全局和命名空间范围中的
const
意味着内部链接(
static

/.h
名称空间分析器{
外部常量规则解析测试;
}
//.cc
常量规则解析器::parseTest=int_>>,'>>int;
// .h
namespace parsers {
    extern const rule<it, test()> parseTest;
}

// .cc
const rule<it, test()> parsers::parseTest = int_ >> ',' >> int_;