Boost logo

Boost Users :

From: Mike Thornton (endoscope_at_[hidden])
Date: 2007-10-30 21:07:16


I tried compiling John Maddock's example code from the URL I provided below,
and I get the error below. (I run into a similar error with my own code).
Any ideas on how to fix this? System setting? FYI, this is the exact
code...

/*
 *
 * Copyright (c) 1998-2002
 * John Maddock
 *
 * Use, modification and distribution are subject to the
 * Boost Software License, Version 1.0. (See accompanying file
 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 *
 */

 /*
  * LOCATION: see http://www.boost.org for most recent version.
  * FILE partial_regex_match.cpp
  * VERSION see <boost/version.hpp>
  * DESCRIPTION: regex_match example using partial matches.
  */

#include <string>
#include <iostream>
#include <boost/regex.hpp>

boost::regex e("(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})");

bool is_possible_card_number(const std::string& input)
{
   //
   // return false for partial match, true for full match, or throw for
   // impossible match based on what we have so far...
   boost::match_results<std::string::const_iterator> what;
   if(0 == boost::regex_match(input, what, e, boost::match_default |
boost::match_partial))
   {
      // the input so far could not possibly be valid so reject it:
      throw std::runtime_error("Invalid data entered - this could not
possibly be a valid card number");
   }
   // OK so far so good, but have we finished?
   if(what[0].matched)
   {
      // excellent, we have a result:
      return true;
   }
   // what we have so far is only a partial match...
   return false;
}

int main(int argc, char* argv[])
{
   try{
      std::string input;
      if(argc > 1)
         input = argv[1];
      else
         std::cin >> input;
      if(is_possible_card_number(input))
      {
         std::cout << "Matched OK..." << std::endl;
      }
      else
         std::cout << "Got a partial match..." << std::endl;
   }
   catch(const std::exception& e)
   {
      std::cout << e.what() << std::endl;
   }
   return 0;
}

and again the error

> test.cpp : (.text._ZN5boost9re_detail12pe

r
> >
> l_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_[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(__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_m
> atch<__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>
> > >)]+0xea): 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)'

thanks.
mike t.

On 10/30/07, Michael Linck <mgl_at_[hidden]> wrote:
>
> It means that somewhere along the line you handed some template the
> wrong type. More cannot really be said with the information you have
> provided.
>
> mike
>
> On Tue, 2007-10-30 at 17:28 -0700, Mike Thornton wrote:
> > Using g++ on a GNU Ubuntu Linux 7.04 machine, I am unable to compile
> > the boost example code (saved as test.cpp) at
> >
> > http://www.boost.org/libs/regex/example/snippets/partial_regex_match.cpp
> >
> > Although I can compile my own code which does not use boost, I get a
> > lot of garbled output from the example code...part of which is listed
> > below. Any ideas on what is wrong and how to fix it?
> >
> > test.cpp : (.text._ZN5boost9re_detail12per
> >
> l_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_[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(__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_m
> atch<__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>
> > >)]+0xea): 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)'
> >
> > Thanks.
> > Mike
> > _______________________________________________
> > Boost-users mailing list
> > Boost-users_at_[hidden]
> > http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net