- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下代码:
#include <boost/fusion/include/define_struct.hpp>
#include <boost/spirit/include/qi.hpp>
#include <iostream>
#include <string>
BOOST_FUSION_DEFINE_STRUCT(
(), foo,
(int, bar)
(int, baz)
)
template <typename Iterator>
struct parser : boost::spirit::qi::grammar<Iterator, foo(), boost::spirit::qi::ascii::space_type>
{
parser() : parser::base_type(start)
{
start %= boost::spirit::qi::int_ >> boost::spirit::qi::int_;
}
boost::spirit::qi::rule<Iterator, foo(), boost::spirit::qi::ascii::space_type> start;
};
int main()
{
const std::string input_data("0 1");
foo instance;
auto itr = input_data.begin();
auto end = input_data.end();
parser<decltype(itr)> g;
bool res = boost::spirit::qi::phrase_parse(
itr
, end
, g
, (
boost::spirit::ascii::space
| ("//" >> *(boost::spirit::qi::char_ - boost::spirit::qi::eol) >> boost::spirit::qi::eol | boost::spirit::qi::blank)
)
, instance
);
if (res && itr == end)
{
std::cout << "Parsing succeeded \n";
std::cout << instance.bar << ' ' << instance.baz << '\n';
}
else
{
std::cout << "Parsing failed \n";
}
}
它给我以下错误:
1>e:\libs\boost_1_54_0\boost\spirit\home\qi\nonterminal\rule.hpp(303): error C2664: 'bool boost::function4<R,T0,T1,T2,T3>::operator ()(T0,T1,T2,T3) const' : cannot convert parameter 4 from 'const skipper_type' to 'const boost::spirit::qi::char_class<Tag> '
1> with
1> [
1> R=bool,
1> T0=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>> &,
1> T1=const std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>> &,
1> T2=boost::spirit::context<boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,boost::fusion::vector0<>> &,
1> T3=const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>> &
1> ]
1> and
1> [
1> Tag=boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>
1> ]
1> Reason: cannot convert from 'const skipper_type' to 'const boost::spirit::qi::char_class<Tag>'
1> with
1> [
1> Tag=boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1> e:\libs\boost_1_54_0\boost\spirit\home\qi\reference.hpp(43) : see reference to function template instantiation 'bool boost::spirit::qi::rule<Iterator,T1,T2,T3,T4>::parse<Context,Skipper,Attribute>(Iterator &,const Iterator &,Context &,const Skipper &,Attribute &) const' being compiled
1> with
1> [
1> Iterator=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,
1> T1=`anonymous-namespace'::foo (void),
1> T2=boost::spirit::ascii::space_type,
1> T3=boost::spirit::unused_type,
1> T4=boost::spirit::unused_type,
1> Context=boost::spirit::context<boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,boost::spirit::locals<>>,
1> Skipper=skipper_type,
1> Attribute=`anonymous-namespace'::foo
1> ]
1> e:\libs\boost_1_54_0\boost\spirit\home\qi\reference.hpp(43) : see reference to function template instantiation 'bool boost::spirit::qi::rule<Iterator,T1,T2,T3,T4>::parse<Context,Skipper,Attribute>(Iterator &,const Iterator &,Context &,const Skipper &,Attribute &) const' being compiled
1> with
1> [
1> Iterator=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,
1> T1=`anonymous-namespace'::foo (void),
1> T2=boost::spirit::ascii::space_type,
1> T3=boost::spirit::unused_type,
1> T4=boost::spirit::unused_type,
1> Context=boost::spirit::context<boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,boost::spirit::locals<>>,
1> Skipper=skipper_type,
1> Attribute=`anonymous-namespace'::foo
1> ]
1> e:\libs\boost_1_54_0\boost\spirit\home\qi\parse.hpp(165) : see reference to function template instantiation 'bool boost::spirit::qi::reference<Subject>::parse<Iterator,boost::spirit::context<Attributes,Locals>,skipper_type,Attr>(Iterator &,const Iterator &,Context &,const Skipper &,Attribute &) const' being compiled
1> with
1> [
1> Subject=const boost::spirit::qi::rule<std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,`anonymous-namespace'::foo (void),boost::spirit::ascii::space_type,boost::spirit::unused_type,boost::spirit::unused_type>,
1> Iterator=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,
1> Attributes=boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,
1> Locals=boost::spirit::locals<>,
1> Attr=`anonymous-namespace'::foo,
1> Context=boost::spirit::context<boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,boost::spirit::locals<>>,
1> Skipper=skipper_type,
1> Attribute=`anonymous-namespace'::foo
1> ]
1> e:\libs\boost_1_54_0\boost\spirit\home\qi\parse.hpp(165) : see reference to function template instantiation 'bool boost::spirit::qi::reference<Subject>::parse<Iterator,boost::spirit::context<Attributes,Locals>,skipper_type,Attr>(Iterator &,const Iterator &,Context &,const Skipper &,Attribute &) const' being compiled
1> with
1> [
1> Subject=const boost::spirit::qi::rule<std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,`anonymous-namespace'::foo (void),boost::spirit::ascii::space_type,boost::spirit::unused_type,boost::spirit::unused_type>,
1> Iterator=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,
1> Attributes=boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,
1> Locals=boost::spirit::locals<>,
1> Attr=`anonymous-namespace'::foo,
1> Context=boost::spirit::context<boost::fusion::cons<`anonymous-namespace'::foo &,boost::fusion::nil>,boost::spirit::locals<>>,
1> Skipper=skipper_type,
1> Attribute=`anonymous-namespace'::foo
1> ]
1> e:\libs\boost_1_54_0\boost\spirit\home\qi\parse.hpp(197) : see reference to function template instantiation 'bool boost::spirit::qi::phrase_parse<Iterator,Expr,Skipper,Attr>(Iterator &,Iterator,const Expr &,const Skipper &,boost::spirit::qi::skip_flag,Attr &)' being compiled
1> with
1> [
1> Iterator=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,
1> Expr=parser<std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>>,
1> Skipper=boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>>,0> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const char (&)[3]>,0>,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference,boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::minus,boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::standard::char_> ,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::eol>,0> &>,2> &>,1> &>,2> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::eol>,0> &>,2> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank,boost::spirit::char_encoding::standard>>,0> &>,2> &>,2>,
1> Attr=`anonymous-namespace'::foo
1> ]
1> e:\work\projects\src\min\min\main.cpp(13803) : see reference to function template instantiation 'bool boost::spirit::qi::phrase_parse<std::_String_const_iterator<_Mystr>,parser<Iterator>,boost::proto::exprns_::expr<Tag,Args,Arity>,`anonymous-namespace'::foo>(Iterator &,Iterator,const Expr &,const Skipper &,Attr &)' being compiled
1> with
1> [
1> _Mystr=std::_String_val<std::_Simple_types<char>>,
1> Iterator=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,
1> Tag=boost::proto::tagns_::tag::bitwise_or,
1> Args=boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>>,0> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const char (&)[3]>,0>,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference,boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::minus,boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::standard::char_> ,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::eol>,0> &>,2> &>,1> &>,2> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::eol>,0> &>,2> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank,boost::spirit::char_encoding::standard>>,0> &>,2> &>,
1> Arity=2,
1> Expr=parser<std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>>,
1> Skipper=boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>>,0> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<const char (&)[3]>,0>,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference,boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::minus,boost::proto::argsns_::list2<const boost::spirit::terminal<boost::spirit::tag::standard::char_> ,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::eol>,0> &>,2> &>,1> &>,2> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::eol>,0> &>,2> &,const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::blank,boost::spirit::char_encoding::standard>>,0> &>,2> &>,2>,
1> Attr=`anonymous-namespace'::foo
1> ]
这是添加的结果
("//" >> *(boost::spirit::qi::char_ - boost::spirit::qi::eol) >> boost::spirit::qi::eol | boost::spirit::qi::blank)
我做错了什么?我该如何解决?
最佳答案
确实,您的 skipper 类型不正确。
改变它例如:
#include <boost/fusion/include/define_struct.hpp>
#include <boost/spirit/include/qi.hpp>
#include <iostream>
#include <string>
namespace qi = boost::spirit::qi;
BOOST_FUSION_DEFINE_STRUCT(
(), foo,
(int, bar)
(int, baz)
)
template <typename Iterator, typename Skipper>
struct parser : qi::grammar<Iterator, foo(), Skipper>
{
parser() : parser::base_type(start)
{
start %= qi::int_ >> qi::int_;
}
qi::rule<Iterator, foo(), Skipper> start;
};
int main()
{
const std::string input_data("0 1");
foo instance;
auto itr = input_data.begin();
auto end = input_data.end();
qi::rule<decltype(itr)> skipper =
qi::ascii::space
| ("//" >> *(qi::char_ - qi::eol) >> qi::eol | qi::blank);
parser<decltype(itr), decltype(skipper)> g;
bool res = qi::phrase_parse(itr, end, g, skipper, instance);
if (res && itr == end)
{
std::cout << "Parsing succeeded \n";
std::cout << instance.bar << ' ' << instance.baz << '\n';
}
else
{
std::cout << "Parsing failed \n";
}
}
关于c++ - boost spirit skipper - 编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672316/
我试图用一种有点奇怪的语法为该语言编写一个解析器,并偶然发现了一个船长的问题,这使我认为我不完全了解它们在Boost.Spirit.X3中的工作方式。 问题在于,对于某些规则,EOL是有意义的(即,我
我在使用 boost spirit skippers 时遇到了麻烦。 我需要像这样解析一个文件: ROW int int [int, int] int [int, int] ... 我能够毫无问题地解
我有以下代码: #include #include #include #include BOOST_FUSION_DEFINE_STRUCT( (), foo, (int, bar)
我在使用 boost spirit skippers 时遇到了麻烦。 我需要像这样解析一个文件: ROW int int [int, int] int [int, int] ... 我能够毫无问题地解
正如标题,现在我无法在上传前检查文件类型。我只验证文件上传成功后不允许保存数据。下面是基本代码 updateAvatar : function(data, context, req, res) {
我使用 boost spirit 来解析颜色。效果很好,但在我更改迭代器类型后, skipper 停止工作。 "rgb(1.0,1.0,0.5)" // this works " rgb(0.2,0
我对 sails-skipper 有一个大问题。有时它工作正常,但大多数情况下当我发布文件(带有元字段)时它会刷新正文。 console.log(req.body) 打印{}。 我已在此问题发布此 #
引用:https://github.com/balderdashy/skipper/issues/49 适配器:船长网格 基本 Controller 代码: req.file('fileTest')
我有一个可以上传文件的表单。我直接用船长上传文件,效果很好。 req.file('file').upload({ adapter: require('skipper-s3'), key
我正在尝试使用 boost::spirit 构建一个解析器,除了其他内容外,它应该能够解析成对的整数,例如“(3,4)”。 我的代码可以正常工作,但我也想接受包含空格的对,即“( 4 , 6 )”。当
假设我们要像这样解析一个递归 block 。当“skip_comments_tag”作为 block 的前缀时,我们递归地跳过该 block 内的所有评论(/*...*/)。 { {}
我必须使用 boost::spirit 进行解析,我想使用 phrase_parse 函数: qi::phrase_parse(str.begin(), str.end(), grammar, asc
我在我的 sails.js 应用程序中使用 gridfs 将图像上传到服务器。我的上传代码如下 upload: function (req, res) { req.file('ava
我正在使用 skipper 上传文件,一切正常,但我的选项 save 有问题,因为我通过函数为其分配值但它不起作用,我如何分配 req 的值。 param('titulo') + 选项另存为的文件扩展
我知道我可以通过使用适当的“解析”成员函数模板创建一个对象来实现自定义解析器,但我不知道我需要做什么才能使它在上下文中使用 skipper ,这似乎需要做.也就是说,下面我预计两种情况都会成功,但第二
所以我有以下 qi skipper : template struct verilog_skipper : public qi::grammar { verilog_skipper() : veril
我已经开始在 Sails.js 中使用 pkgcloud 为 Skipper 构建自定义适配器来上传到 Rackspace 云文件,但我陷入了困境。该文件似乎并未实际上传,并且 try catch 错
我正在使用 Skipper.js 将图像上传到 Amazon Web Service S3,但使用 无法为上传的文件创建公共(public) URL>Skipper.js。我不想使用 Skipper-
我正在升级到 Sails.js 版本 0.10,现在需要使用 Skipper管理我的文件上传。 当我上传一个文件时,我会使用 UUID 为其生成一个新名称,并将其保存在 public/files/文件
我是一名优秀的程序员,十分优秀!