Código C++:
Ver originalNumero::Numero (const Cadena& numero) throw (Numero::Incorrecto) {
char* num_nuevo = new char [numero.longitud() + 1];
strcpy (num_nuevo
, numero.
c_str());
struct EsBlanco {
bool operator
() (char c
) const { return isspace(c
); } };
struct EsDigito : unary_function<char,bool> {
bool operator
() (char c
) const { return isdigit(c
); } };
char* final_nuevo
= remove_if
(num_nuevo
, num_nuevo
+ strlen(num_nuevo
), EsBlanco
()); *final_nuevo = '\0';
char* alfabetico = find_if (num_nuevo,final_nuevo,not1(EsDigito()));
if (*alfabetico != '\0')
throw(Incorrecto(DIGITOS));
if (strlen(num_nuevo
) < LongitudMinima
|| strlen(num_nuevo
) > LongitudMaxima
) throw(Incorrecto(LONGITUD));
if (!numeroValido(num_nuevo))
throw(Incorrecto(NO_VALIDO));
numero_ = num_nuevo;
}
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