2
私はブーストスピリットを学んでおり、ドキュメントで与えられている例をダブルスの代わりに文字列にマッチさせるだけで修正しました。しかし、コードはコンパイルされず、デバッグできないエラーが発生します。以下はコードと印刷されたエラーです。この問題をデバッグするのを手伝ってもらえますか?ブーストスピリットを使用した文字列の一致
PS:私は、phoenix :: refをベクトル文字列に使用していると推測していますが、その理由と理由は正確にはわかりません。
#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_stl.hpp>
#include <boost/config/warning_disable.hpp>
#include <iostream>
#include <string>
#include <vector>
namespace client
{
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
template <typename Iterator>
bool parse_data(Iterator first, Iterator last, std::vector<std::string>& v)
{
using qi::double_;
using qi::char_;
using qi::phrase_parse;
using qi::_1;
using ascii::space;
using phoenix::ref;
using phoenix::push_back;
bool r = phrase_parse(
first,
last,
+(char_)[push_back(ref(v), _1)],
char_('/')
);
if (first != last)
return false;
return r;
}
}
int
main()
{
std::string str;
while (getline(std::cin, str))
{
if (str.empty())
break;
std::vector<std::string> v;
if(client::parse_data(str.begin(), str.end(), v))
{
std::cout << std::endl << "Parsing done" << std::endl;
std::cout << "Numbers are " ;
for(std::vector<std::string>::iterator i = v.begin(); i < v.end(); i++)
{
std::cout << *i <<" ";
}
std::cout << std::endl;
}
else
{
std::cout << "Parsing Failed" << std::endl;
}
}
return 0;
}
これは私が取得エラーです:
/usr/local/include/boost_1_46_1/boost/spirit/home/phoenix/stl/container/container.hpp:492:
error: invalid conversion from ‘const char’ to ‘const char*’
/usr/local/include/boost_1_46_1/boost/spirit/home/phoenix/stl/container/container.hpp:492:
error: initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]’
ありがとうございます!コードは、2番目のコードブロック用にコンパイルされています。 – Nik
私はもう少し質問があります。 1)2番目のコードブロックは私とどのように異なっていますか? 2)私は単一の文字を+ char_とマッチングするだけです。文字列にどのように一致させるのですか? – Nik