2013-05-23 13 views
5

Więc mój profesor dał mi pracę z regex w C++.Skompiluj i wyrecytuj w C++ używając eclipse

Więc próbowałem napisać mój kod w czasie zaćmienia (używam linuxa (ubuntu 12.04)).

więc wziąłem kod:

// regex_search example 
#include <iostream> 
#include <string> 
#include <regex> 

int main() 
{ 
    std::string s ("this subject has a submarine as a subsequence"); 
    std::smatch m; 
    std::regex e ("\\b(sub)([^ ]*)"); // matches words beginning by "sub" 

    std::cout << "Target sequence: " << s << std::endl; 
    std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl; 
    std::cout << "The following matches and submatches were found:" << std::endl; 

    while (std::regex_search (s,m,e)) { 
    for (auto x:m) std::cout << x << " "; 
    std::cout << std::endl; 
    s = m.suffix().str(); 
    } 

    return 0; 
} 

Jak widać jest to prosty kod do pracy z regex.

więc staram się go zbudować i Zaćmienie daje mi błąd:

Type 'smatch' could not be resolved 

a ponadto:

Type 'std::regex' could not be resolved 

czym polega problem?

Próbowałem dodać flagę -std = C++ 0x w odpowiednim miejscu (właściwości-> c/C++ kompilacji -> Różne) i nic się nie dzieje.

Może robię to źle?

Może muszę dodać link do biblioteki jak w pthread?

+0

Jaka wersja GCC są uruchomione? – Nick

+0

Prawdopodobnie używasz gcc 4.7.2 (lub może wcześniej) z tą wersją Ubuntu? Wyrażenia regularne nie są implementowane w tej wersji. (Nie jestem pewien, jak daleko się teraz znajdują. Ostatnie dowody, które zobaczyłem w związku z jakąkolwiek działalnością, to jakieś niejasne komentarze na liście dyskusyjnej w styczniu). – BoBTFish

+0

@Nick I thing Używam wersji 4.7.1 –

Odpowiedz

0

regex jest dodawany w obszarze nazw std::tr1. proszę zadeklarować obiekt do wyrażenia regularnego jak std::tr1::regex, to powinno działać

+1

Dzięki DevZer0, ale naprawdę nie rozumiem, jaka jest rzeczywista zmiana, z wyjątkiem zmiany czcionki? – Zeeshan

0

Flaga nie wystarczy, trzeba dodać symbol preprocesora „____GXX_EXPERIMENTAL_CXX0X____” w „C/C++ Ogólne -> Ścieżki i symboli -> Symbole - > GNU C++ "też. Aby uzyskać szczegółowe informacje, zapoznaj się z następującym pytaniem: Eclipse CDT C++11/C++0x support. Jest także w wiki Eclipse: http://wiki.eclipse.org/CDT/User/FAQ#CDT_does_not_recognize_C.2B.2B11_features. Drugie łącze zawiera również dodatkowy link do strony forum opisującej "ukrytą" opcję (http://www.eclipse.org/forums/index.php/mv/msg/373462/909018/#msg_909018). Jeśli skonfigurujesz kompilator za pomocą opcji "ukryty" zgodnie z opisem w łączu, nadal działa po usunięciu flagi "____GXX_EXPERIMENTAL_CXX0X____". Przynajmniej dla mnie działało to w ten sposób (Eclipse Juno 4.2.2 i GCC 4.7.2).

3

Moja konfiguracja:

System operacyjny: Ubuntu 14.04 Kompilator: GCC 4.8.2 IDE: Eclipse 3.8.1

problem:

podaję regex (#include <regex>) do mojego plik nagłówkowy, ale mój IDE skarży się, że nie można rozwiązać typu "czegoś". Próbowałem już używać przestrzeni nazw takich jak std :: i std :: tr1, tak jak ludzie z google radzili, bez powodzenia.

Rozwiązanie:

Rozwiązanie jest tak proste, jak sam problem. Jeśli spojrzysz na usr/include/C++/4.8, zauważysz, że plik regex w folderze głównym to rodzaj kodu pośredniczącego. Istnieje jednak inny plik regex w folderze/tr1.

Sztuką jest, że zamiast pisać #include <regex>, należy napisać #include <tr1/regex>

After, że jesteś w stanie używać regex przez std :: tr1 :: nazw.

Na przykład tak: std :: tr1 :: smatch

nadzieję, że pomoże!

© http://antaumus.blogspot.com/2014/08/how-to-use-regex-with-gcc-482.html