2011-12-19 13 views
8

puedo crear .o archivo con g ++ -c test.cpp -std = C++ 0x, pero no me puedo enlace, tiene los siguientes errores:std :: regex_iterator con gcc

test.cpp:(.text+0xe5): undefined reference to `std::regex_iterator<char const*, char, std::regex_traits<char> >::regex_iterator(char const*, char const*, std::basic_regex<char, std::regex_traits<char> > const&, std::bitset<11u>)' 
test.cpp:(.text+0xf1): undefined reference to `std::regex_iterator<char const*, char, std::regex_traits<char> >::regex_iterator()' 

Código :

#include <regex> 
#include <iostream> 

#include <string.h> 

typedef std::regex_iterator<const char *> Myiter; 
int main() 
{ 
    const char *pat = "axayaz"; 
    Myiter::regex_type rx("a"); 
    Myiter next(pat, pat + strlen(pat), rx); 
    Myiter end; 


    return (0); 
} 
+1

¿Qué versión de GCC? '' no se implementa y no incluye 4.6.2. Además, ¿por qué no usar 'std :: cregex_iterator' en su lugar? –

+0

@Kerrek SB, 4.6.1 – Yola

+1

¿Ha considerado usar las bibliotecas de refuerzo de expresiones regulares? Both boost :: regex y boost :: xpressive son completamente funcionales. – mark

Respuesta

13

The GNU C++ standard library supports <regex>, pero not until version 4.9.0. (Los encabezados estaban presentes en versiones anteriores, pero no se podían usar.)

Los demás compiladores no lo admiten, por lo que puedo ver.

Puede utilizar un different library si utiliza un GCC anterior.

+7

Tanto MSVC como Clang admiten . En realidad, la expresión regular es prácticamente la única parte de C++ 11 donde GCC está rezagado respecto de otros compiladores. –

Cuestiones relacionadas