2014-11-14 3 views
1

Я работаю над проектом с кем-то, и у нас есть тот же код, но его код компилируется, а мой продолжает выдавать ошибку. Вот мой код:Ошибки по исправлению регулярных выражений в C++

bool r_parser::parseMake(string name, string command, string type, string val) 
{ 
    regex regName("^\\w+$"); 
    if(std::regex_match(name, regName) == true) 
    { 
     cout << "We have a match!" << endl; 
    } 
    return false; 
} 

И здесь ошибки я получаю:

'undefined reference to std::basic_regex<char, std::regex_traits<char> >::_M_compile()' 

'undefined reference to bool std::regex_match<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<std::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, char, std::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, std::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<std::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >&, std::basic_regex<char, std::regex_traits<char> > const&, std::bitset<11u>)' 

Поскольку код моего партнера составлен, и мы не смогли найти ничего другого о своем коде, я задавался вопросом, если кто-то мог пролить свет на эту ситуацию.

Спасибо за ваше время.

EDIT: Я забыл упомянуть, у меня есть:

#include <regex> 
#include <string> 
#include <iostream> 
using namespace std; 

в моем файле заголовка.

+1

Какой компилятор и версия вы используете? Не все версии компилятора поддерживают std :: regex. – Galik

+0

для начала, ваш фрагмент отсутствует '#inlcude '. Также отсутствует '#inlcude ', '#inlcude ' и 'using namespace std', все из которых необходимы для компиляции этой функции. –

+0

Извините, я забыл упомянуть, что у меня были те, которые включены в мой заголовочный файл. Я добавил это на главный пост. Я бегу gcc 4.8.1 –

ответ

2

Я сделал некоторые дополнительные исследования, Майкл, и казалось бы, что #include <regex> является only a placeholder until GCC version 4.9.0.

Если вы на системе Windows, (который я помню, вы), вы используете GCC через MinGW, поэтому вам нужно обновить до последней версии вручную. Я на 4.9.1, и именно поэтому это работает для меня. You can download that from Sourceforge.

Если вы работаете в Linux, вы можете обновить gcc и g ++ через репозитории.

Если вы не хотите обновлять, вы также можете использовать the Boost libraries. Тем не менее, я рекомендую обновить свой компилятор, главным образом потому, что в целом неплохо использовать последнюю версию того компилятора, который вы реализуете, если у вас нет явной причины не делать этого.

Извините, что я не мог ответить на это раньше, но надеюсь, что это поможет!

0

Попробуйте использовать g ++ в качестве компилятора. Поскольку это не требует прямой ссылки libstdC++. Принимая во внимание, что gcc требует прямой ссылки на libstdC++.

+0

По-прежнему получаю ту же ошибку:/ –

1

В Windows следующий код работает для устранения ошибок исправления регулярных выражений.

#include <regex> 
using namespace std; 
+0

это лучший ответ для пользователей Ubuntu. Некоторое программное обеспечение полагается на , когда лучшим решением является использование , потому что теперь оно является частью стандарта. Эта проблема вводит в заблуждение, поскольку/tr1 и/tr2 включены в утилиты обновления для gcc. – Maverick

Смежные вопросы