我的C程序使用一些zlib函数(比如gzopen
,gzread
).我已经zlib.h
在我的程序中包含了头文件,并-lz
在编译时添加了选项,但我仍然得到一个错误,即gz函数有未定义的引用.我正在使用kubuntu 11.10并安装了以下软件包:libgh-zlib-dev,zlib1g-dbg,zlib1g和zlib1g-dev.
我试过改变连接命令的位置,但没有运气.这是我现在拥有的那个:
CFLAGS = -Wall -pthread -lm -lz -std = c99-Wextra
我无法使用语法,因此我将其简化为只解析整数.仍然无法让它发挥作用.它是以下语法:
template<typename Iterator>
struct rangeGrammar : qi::grammar<Iterator, int()>
{
rangeGrammar() :
rangeGrammar::base_type(number)
{
using qi::int_;
using qi::_1;
using qi::_val;
number = int_[_val = _1];
}
qi::rule<Iterator, int()> number;
};
Run Code Online (Sandbox Code Playgroud)
它应该只解析一个整数(我知道我可以告诉解析函数使用int_作为语法,但我不知道这个例子中有什么问题).
我的解析功能是:
/* n is a std::string provided by the user */
rangeGrammar<std::string::const_iterator> grammar;
int num = 0;
qi::phrase_parse(n.start(), n.end(), grammar, num);
std::cout << "Number: " << num << std::endl;
Run Code Online (Sandbox Code Playgroud)
我得到以下编译器错误:
/boost/spirit/home/qi/reference.hpp:在成员函数'bool boost :: spirit :: qi :: reference :: parse(Iterator&,const Iterator&,Context&,const Skipper&,Attribute&)const [with Iterator = __gnu_cxx :: __ normal_iterator>,Context = …
我有以下解析规则:
filter = (input >> (qi::repeat(0,2)[char_(';') >> input]))
Run Code Online (Sandbox Code Playgroud)
input
是一个规则,返回一个std::vector<int>
我将vec
简称为的向量.
问题是:filter
规则返回什么复合属性?
我试过了:
fusion::vector <vec,std::vector <fusion::vector <char,vec> > >
Run Code Online (Sandbox Code Playgroud)
但它失败了,我不知道为什么.