Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/04/2014, 08:48
DvNe
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 7 meses
Puntos: 0
Problema con remove_if

Código C++:
Ver original
  1. Numero::Numero (const Cadena& numero) throw (Numero::Incorrecto) {
  2.   char* num_nuevo = new char [numero.longitud() + 1];
  3.   strcpy (num_nuevo, numero.c_str());
  4.  
  5.   struct EsBlanco {
  6.     bool operator() (char c) const { return isspace(c); }
  7.   };
  8.  
  9.   struct EsDigito : unary_function<char,bool> {
  10.     bool operator() (char c) const { return isdigit(c); }
  11.   };
  12.  
  13.   char* final_nuevo = remove_if(num_nuevo, num_nuevo + strlen(num_nuevo), EsBlanco());
  14.   *final_nuevo = '\0';
  15.  
  16.   char* alfabetico = find_if (num_nuevo,final_nuevo,not1(EsDigito()));
  17.   if (*alfabetico != '\0')
  18.   throw(Incorrecto(DIGITOS));
  19.   if (strlen(num_nuevo) < LongitudMinima || strlen(num_nuevo) > LongitudMaxima)
  20.     throw(Incorrecto(LONGITUD));
  21.   if (!numeroValido(num_nuevo))
  22.     throw(Incorrecto(NO_VALIDO));
  23.   numero_ = num_nuevo;
  24. }

Recibo el siguiente error al compilar:

tarjeta.cpp: En el constructor ‘Numero::Numero(const Cadena&)’:
tarjeta.cpp:27:85: error: no hay una función coincidente para la llamada a ‘remove_if(char*&, char*, Numero::Numero(const Cadena&)::EsBlanco)’
tarjeta.cpp:27:85: nota: el candidato es:
/usr/include/c++/4.6/bits/stl_algo.h:1131:5: nota: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)
tarjeta.cpp:30:68: error: no hay una función coincidente para la llamada a ‘not1(Numero::Numero(const Cadena&)::EsDigito)’
tarjeta.cpp:30:68: nota: el candidato es:
/usr/include/c++/4.6/bits/stl_function.h:370:5: nota: template<class _Predicate> std::unary_negate<_Predicate> std::not1(const _Predicate&)
make: *** [tarjeta.o] Error 1