2009-04-15 7 views
0

Vu ce code:compilation du code C++ Avec regex_match Boost

#include <iostream> 
#include <vector> 
#include <fstream> 
#include <sstream> 
#include <boost/regex.hpp> 
using namespace std; 
using namespace boost; 


int main (int arg_count, char *arg_vec[]) { 
    if (arg_count !=2) { 
     cerr << "expected one argument" << endl; 
     return EXIT_FAILURE; 
    } 

    string InputString = arg_vec[1]; 
    string toMatch = "FOO"; 

    const regex e(toMatch); 
    if (const regex_match(InputString, e)) {// this is line 26 
     cout << "Match" << endl; 
    } else { 
     cout << "No Match" << endl; 
    } 


    return 0; 
} 

Compilé avec cette commande:

g++ -I /home/foolishbrat/.boost/include/boost-1_37 test.cc -o test 

Il donne cette erreur:

test.cc: In function `int main(int, char**)': 
test.cc:26: error: syntax error before `)' token 

Quel est le problème avec mon code?

Si je supprime "const" dans la ligne 26 et compilé avec la même commande. Je vais obtenir cette erreur:

/misc/raid2/Melchior/foolishbrat/tmp/ccr3zzcH.o(.gnu.linkonce.t._ZN5boost11regex_matchIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS5_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SD_RNS_13match_resultsISD_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsE+0x61): In function `bool boost::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)': 
: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match()' 
/misc/raid2/Melchior/foolishbrat/tmp/ccr3zzcH.o(.gnu.linkonce.t._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j+0x27): In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned)': 
: undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned)' 
/misc/raid2/Melchior/foolishbrat/tmp/ccr3zzcH.o(.gnu.linkonce.t._ZN5boost9re_detail12perl_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS6_EEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC1ES6_S6_RNS_13match_resultsIS6_S9_EERKNS_11basic_regexIcSD_EENS_15regex_constants12_match_flagsES6_+0xf2): In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher[in-charge](__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)': 
: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)' 
collect2: ld returned 1 exit status 

Mise à jour:

RESOLUE cette compilation et la liaison:

g++ -I ~/.boost/include/boost-1_37 test.cc -o test /home/foolishbrat/.boost/lib/libboost_regex-gcc33-mt-1_37.a 

Répondre

2

Vous devez lier les bibliothèques Boost nécessaires. Ajouter -l <path to libraries> à la commande de construction

+0

@Gayan: merci. Tu as raison. – neversaint

1
if (const regex_match(InputString, e)) {// this is line 26 

Vous n'avez pas besoin (et en effet, si pas) dites const ici. Supprimez simplement le mot, et au moins cette erreur devrait disparaître.

+0

@Pukku: si je supprime "const", j'obtiens encore plus d'erreurs. – neversaint

+0

Que diriez-vous de poster ces erreurs alors? – Reunanen

+0

Généralement, le nombre d'erreurs de compilateur/éditeur de liens n'est pas une indication de votre progression. Vous pouvez corriger un problème et obtenir beaucoup plus d'erreurs qu'auparavant, car la compilation peut maintenant aller plus loin. – Reunanen

0

Retirez le mot-clé const en ligne 26.

Questions connexes