0

我已经阅读了一些文档,并且我更熟悉 VS2010 附带的当前版本。但现在我被 ubuntu 8.04 和 boost 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 > >, __gnu_cxx::__normal_iterator, std::allocator > >, boost::match_results<__gnu_cxx::__normal_iterator, std::allocator > >, std::allocator, std::allocator > > > > >&, boost::regex&, boost::regex_constants::match_flag_type&)'

4

2 回答 2

1

正如霍华德回答的那样,如果您要应用regex_searchsLine自身而不是 iterator范围,则可以使用代替 and 。 例如:sLinebegin()end()

boost::regex_search(sLine, lineSmatch, finalRegex, regFlags);

如果你必须给iterator范围regex_search,因为类型参数match_resultsconst_iterator,第一个和第二个参数也regex_search需要是const_iterator
例如:

std::string::const_iterator b = sLine.begin(), e = sLine.end();
boost::regex_search(b, e, lineSmatch, finalRegex, regFlags);

希望这可以帮助

于 2011-03-28T16:59:34.767 回答
0

无法专门为您提供 ubuntu 8.04 和 boost 1.34 的帮助。然而,以下在实现 C++11的libc++上为我编译。也许它与您的环境足够接近,可以告诉您出了什么问题。

#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);
}
于 2011-03-28T15:26:37.367 回答