我已经阅读了一些文档,我对VS2010附带的当前版本更熟悉。但是现在我被ubuntu 8.04困住了,并且提升了1.34并且得到了一些奇怪的错误。任何人都能说出我做错了什么。以下是regex_search boost v1.34
的手册页以下是我在代码中所做的事情:
std::string sLine;
getline(dataFile, sLine);
boost::match_results<std::string::const_iterator> lineSmatch;
boost::match_flag_type regFlags = boost::match_default;
boost::regex finalRegex(linePattern);
boost::regex_search(sLine.begin(), sLine.end(), lineSmatch, finalRegex, regFlags);
以下是编译错误:
错误:没有匹配函数来调用'regex_search(__ gnu_cxx :: __ normal_iterator,std :: allocator&gt;&gt ;, __gnu_cxx :: __ normal_iterator,std :: allocator&gt;&gt;,boost :: match_results&lt; __ gnu_cxx :: __normal_iterator,std :: allocator&gt;&gt;,std :: allocator,std :: allocator&gt;&gt;&gt;&gt;&gt;&amp;,boost :: regex&amp;,boost :: regex_constants :: match_flag_type&amp;)'< / p>
答案 0 :(得分:1)
如果您要将regex_search
应用于sLine
而不是iterator
sLine
范围,因为 Howard 已回答,您可以使用begin()
代替
end()
和boost::regex_search(sLine, lineSmatch, finalRegex, regFlags);
。
例如:
iterator
如果您必须将regex_search
范围提供给match_results
,那么就是类型
const_iterator
的参数是regex_search
,第一个和第二个
const_iterator
的参数也需要std::string::const_iterator b = sLine.begin(), e = sLine.end();
boost::regex_search(b, e, lineSmatch, finalRegex, regFlags);
例如:
{{1}}
希望这有帮助
答案 1 :(得分:0)
无法帮助您专门使用ubuntu 8.04,并提升1.34。但是,在libc++实现C ++ 11的情况下,我编译了以下内容。也许它与您的环境足够接近,可以告诉您哪里出了问题。
#include <regex>
#include <fstream>
int main()
{
std::ifstream dataFile;
std::string sLine, linePattern;
getline(dataFile, sLine);
std::match_results<std::string::const_iterator> lineSmatch;
std::regex_constants::match_flag_type regFlags =
std::regex_constants::match_default;
std::regex finalRegex(linePattern);
std::regex_search(sLine, lineSmatch, finalRegex, regFlags);
}