【发布时间】:2011-01-31 20:01:28
【问题描述】:
我最近在 windows 中编写了一些精神解析代码,我最近尝试在 ubuntu 机器上构建它并遇到了一个我正在努力解决的编译错误。
经过一些黑客攻击和削减,我设法提出了这个示例代码 sn-p,它表现出相同的行为:
struct FooParser
: spirit::qi::grammar<
std::string::const_iterator,
double(),
spirit::qi::ascii::space_type>
{
FooParser() : FooParser::base_type(a_rule)
{
using namespace boost::spirit::qi;
a_rule = double_;
}
spirit::qi::rule<
string::const_iterator,
double(),
spirit::qi::ascii::space_type> a_rule;
};
然后像这样传递给一个短语解析:
double result;
std::string txt;
FooParser foobar;
//...
if(phrase_parse(txt.begin(), txt.end(), foobar, space, result))
{
//do something
}
并且在编译时,会产生如下错误:
boost/spirit/home/qi/reference.hpp:41: error: no matching function for call to
‘boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >, double(),
boost::proto::exprns_::expr<boost::proto::tag::terminal,
boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::ascii> >, 0l>, boost::fusion::unused_type,
boost::fusion::unused_type>::parse(__gnu_cxx::__normal_iterator<char*,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, const
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >&, const boost::fusion::unused_type&, const
boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,
boost::spirit::char_encoding::ascii> >&, double&) const’
让我感到沮丧的是,Visual Studio 似乎非常乐意编译和运行代码。我希望聪明的互联网能告诉我我犯了什么错误。
【问题讨论】: