首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误编译精神样本

错误编译精神样本
EN

Stack Overflow用户
提问于 2012-02-20 21:40:49
回答 1查看 749关注 0票数 5

对于其他问题的公认答案将我引向示例,但是编译它会给出一个很长的错误列表。在这里,我只添加了包含和虚拟main()的示例代码:

代码语言:javascript
复制
#include <boost/spirit/include/qi.hpp>
#include <vector>
#include <map>
#include <string>
#include <iostream>

namespace qi = boost::spirit::qi;

template <typename Iterator>
struct keys_and_values
  : qi::grammar<Iterator, std::map<std::string, std::string>()>
{
    keys_and_values()
      : keys_and_values::base_type(query)
    {
        query =  pair >> *((qi::lit(';') | '&') >> pair);
        pair  =  key >> -('=' >> value);
        key   =  qi::char_("a-zA-Z_") >> *qi::char_("a-zA-Z_0-9");
        value = +qi::char_("a-zA-Z_0-9");
    }
    qi::rule<Iterator, std::map<std::string, std::string>()> query;
    qi::rule<Iterator, std::pair<std::string, std::string>()> pair;
    qi::rule<Iterator, std::string()> key, value;
};

int main(int argc, char **argv)
{
    std::string input("key1=value1;key2;key3=value3");  // input to parse
    std::string::iterator begin = input.begin();
    std::string::iterator end = input.end();

    keys_and_values<std::string::iterator> p;    // create instance of parser
    std::map<std::string, std::string> m;        // map to receive results
    bool result = qi::parse(begin, end, p, m);   // returns true if successful
}

我已经尝试过boost 1.42 (我的Ubuntu11.04发行版的默认版本)和1.48 (下载)。错误(我报告由QtCreator过滤的错误)不同:ver1.42给出

代码语言:javascript
复制
/usr/include/boost/fusion/support/tag_of.hpp:92:13: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::mpl::not_<boost::fusion::detail::is_specialized<std::pair<std::basic_string<char>, std::basic_string<char> > > >::************)’

/usr/include/boost/spirit/home/support/attributes.hpp:409: error: no matching function for call to ‘std::basic_string<char>::basic_string(std::pair<std::basic_string<char>, std::basic_string<char> >&)’

/usr/include/boost/spirit/home/support/attributes.hpp:409: error: no matching function for call to ‘std::basic_string<char>::basic_string(mpl_::void_&)’

同时。1.48

代码语言:javascript
复制
/home/carlo/Projects/spirit_vect_literals-build-desktop/../../cpp/boost_1_48_0/boost/spirit/home/qi/detail/assign_to.hpp:123: error: no matching function for call to ‘std::pair<std::basic_string<char>, std::basic_string<char> >::pair(const std::basic_string<char>&)’

我是不是少了点什么?

编辑:我找到了解决方案:添加这个标头,两个版本都编译

代码语言:javascript
复制
#include <boost/fusion/adapted/std_pair.hpp>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 01:36:52

恭喜你找到了这个..。几周前我也犯了同样的错误,浪费了几个小时。正如您所发现的,解决方案只是包含以下内容:

代码语言:javascript
复制
#include <boost/fusion/adapted/std_pair.hpp>

它为Qi使用std::偶对作为规则的输出提供了必要的魔力。

我主要是把这个答案留在这里,这样这个问题就不再是没有答案的了--如果你想添加/接受你自己的答案,我会撤回这个问题。

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

https://stackoverflow.com/questions/9368822

复制
相关文章

相似问题

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