Здравствуйте, я пытаюсь использовать spirit x3 для заполнения строк в векторе, но я получаю следующую ошибку. Код прямо из документации, за исключением того, что вектор использует строки.
error: no matching function for call to
std::vector<std::__cxx11::basic_string<char>
>::push_back(boost::spirit::x3::unused_type&)’
auto push_back = [&](auto& ctx){ slt.push_back(_attr(ctx)); };`
Мой код выглядит следующим образом, я думаю, что все необходимые включения включены (это внутри метода класса):
#include <boost/spirit/home/x3.hpp>
#include <algorithm>
#include <bitset>
#include <fstream>
#include <iostream>
#include <iterator>
#include <map>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>
namespace x3 = boost::spirit::x3;
namespace ascii = boost::spirit::x3::ascii;
using x3::double_;
using x3::phrase_parse;
using x3::_attr;
using x3::parse;
using x3::lit;
using x3::char_;
using x3::lexeme;
using x3::alpha;
using x3::alnum;
using x3::skip;
using ascii::space;
/*Something,something.......*/
auto name = x3::rule<class name>{}
= char_("a-zA-Z") >> *char_("a-z_A-Z0-9");
auto args_l = x3::rule<class l>{}
= " " >> (name % skip(space)[","]);
auto comment = x3::rule<class comment>{}
= "//" >> *char_;
auto iter_start = line.begin();
auto iter_end = line.end();
vector<string> slt;
auto push_back = [&](auto& ctx){ slt.push_back(_attr(ctx)); };
bool result = parse(
iter_start,
iter_end,
name[push_back] >> -args_l >> *(char_(" "))
);
/ Что-то, что-то ....... /