首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当BOOST_FUSION_ADAPT_STRUCT的参数数为2时,Boost融合编译失败

当BOOST_FUSION_ADAPT_STRUCT的参数数为2时,Boost融合编译失败
EN

Stack Overflow用户
提问于 2012-04-02 05:53:49
回答 1查看 223关注 0票数 0

为什么无法使用g++ -c filename.cpp进行编译:

代码语言:javascript
运行
复制
#include <boost/config/warning_disable.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 <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/variant/variant.hpp>
#include <iostream>

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
namespace lambda = boost::lambda;

using namespace std;


struct Intensity
{
    int intensity_;
};

BOOST_FUSION_ADAPT_STRUCT(
    Intensity,
    (int, intensity_)
)

template <typename Iterator>
struct InternalParser : qi::grammar<Iterator, Intensity(), ascii::space_type>
{
    InternalParser() : InternalParser::base_type(intensity)
    {
        intensity %= qi::int_;
    }
    qi::rule<Iterator, Intensity(), ascii::space_type> intensity;
};

typedef InternalParser<string::const_iterator> TheParser;

TheParser parser;

但是如果我在结构强度中添加一个新的字段,它就会起作用:

代码语言:javascript
运行
复制
#include <boost/config/warning_disable.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 <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/variant/variant.hpp>
#include <iostream>

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
namespace lambda = boost::lambda;

using namespace std;


struct Intensity
{
    int dummy_;
    int intensity_;
};

BOOST_FUSION_ADAPT_STRUCT(
    Intensity,
    (int, dummy_)
    (int, intensity_)
)

template <typename Iterator>
struct InternalParser : qi::grammar<Iterator, Intensity(), ascii::space_type>
{
    InternalParser() : InternalParser::base_type(intensity)
    {
        intensity %= qi::int_ >> qi::int_;
    }
    qi::rule<Iterator, Intensity(), ascii::space_type> intensity;
};

typedef InternalParser<string::const_iterator> TheParser;

TheParser parser;

G++版本: gcc版本4.4.6 20110731 (红帽4.4.6-3) (GCC)

Boost版本: 1.41.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-02 15:51:56

这是boost 1.41.0中的一个bug。我用1.49.0编译了第一个例子,它工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9968658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档