gpt4 book ai didi

c++ - 编译 Spirit 示例时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:23 25 4
gpt4 key购买 nike

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

#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(我的 Ubuntu 11.04 发行版上的默认设置)和 1.48(已下载)。错误(我报告那些被 QtCreator 过滤的错误)不同:ver 1.42 给出

/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给

/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>&)’

我是不是漏了什么?

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

#include <boost/fusion/adapted/std_pair.hpp>

最佳答案

祝贺您追踪到这个问题...几周前我遇到了同样的错误并浪费了几个小时。正如您所发现的,解决方案只是包括以下内容:

#include <boost/fusion/adapted/std_pair.hpp>

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

我在这里留下这个答案主要是为了让问题不再显示为未回答 - 如果你想添加/接受你自己的答案,我会收回这个。

关于c++ - 编译 Spirit 示例时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com