Boost (1.34) Синтаксическая ошибка Regex - PullRequest
0 голосов
/ 28 марта 2011

Я прочитал некоторое количество документации, и я более знаком с текущей версией, поставляемой с 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 &) '

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Если вы собираетесь применить regex_search к sLine вместо iterator диапазон, а Говард ответил, вы можете использовать sLine вместо 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);

Надеюсь, это поможет

0 голосов
/ 28 марта 2011

Не могу помочь вам специально с Ubuntu 8.04 и Boost 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);
}
...