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_;