elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  unary_negate
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: unary_negate  (Leído 1,330 veces)
DvNe

Desconectado Desconectado

Mensajes: 12


Ver Perfil
unary_negate
« en: 7 Abril 2014, 22:53 pm »

Buenas estoy escribiendo la siguiente funcion


Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <functional>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. class EsDigito {
  9. public:
  10. bool operator() (const char& c) const { return isdigit(c); }
  11. };
  12.  
  13. int main() {
  14. unary_negate<bool> EsAlfabetico (EsDigito);
  15.  
  16. char letras2[] = " 452485A56321";
  17. inicio = letras;
  18. fin = letras + sizeof(letras)/sizeof(char);
  19.  
  20. if (find_if(inicio,fin,EsAlfabetico()))
  21.  
  22.   cout << "Alfabetico" << endl;
  23.  
  24.  return 0;
  25.  
  26. }
  27.  



Cuando compilo me sale el siguiente error:

prueba.cpp:35:39: error: faltan argumentos para la función ‘std::unary_negate<bool> EsAlfabetico(EsDigito)’
prueba.cpp:30:22: nota: se declara aquí

Alguien me puede explicar el por qué

 
 
 


« Última modificación: 7 Abril 2014, 23:10 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.902


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: unary_negate
« Respuesta #1 en: 7 Abril 2014, 23:12 pm »

Con el siguiente ejemplo podes solucionar tus errores:
http://www.cplusplus.com/reference/functional/unary_negate/

Necesitas el argument_type, no tenes que usar llamada de funcion en el tercer parametro de find_if, tenes que usar un objeto para el unary_negate, etc..


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DvNe

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: unary_negate
« Respuesta #2 en: 7 Abril 2014, 23:31 pm »

Entonces debería definir la clase como

class EsDigito {
public:
bool operator() (const char& c) const { return isdigit(c); }
typedef char argument_type;
};

y la llamada a la función sería find_if(inicio,fin,EsAlfabetico) ?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.902


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: unary_negate
« Respuesta #3 en: 7 Abril 2014, 23:33 pm »

Si, ahora te falta arreglar la parte del unary_negate propiamente dicho (EsAlfabetico).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DvNe

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: unary_negate
« Respuesta #4 en: 7 Abril 2014, 23:49 pm »

Algo estoy haciendo mal porque ahora me sale este fallo:

In file included from /usr/include/c++/4.6/string:50:0,
                 from /usr/include/c++/4.6/bits/locale_classes.h:42,
                 from /usr/include/c++/4.6/bits/ios_base.h:43,
                 from /usr/include/c++/4.6/ios:43,
                 from /usr/include/c++/4.6/ostream:40,
                 from /usr/include/c++/4.6/iostream:40,
                 from prueba.cpp:1:
/usr/include/c++/4.6/bits/stl_function.h: En la instanciación de ‘std::unary_negate<bool>’:
prueba.cpp:36:38:   instanciado desde aquí
/usr/include/c++/4.6/bits/stl_function.h:352:11: error: ‘bool’ no es de tipo clase, struct o union
/usr/include/c++/4.6/bits/stl_function.h:363:7: error: ‘bool’ no es de tipo clase, struct o union
In file included from /usr/include/c++/4.6/algorithm:63:0,
                 from prueba.cpp:4:
/usr/include/c++/4.6/bits/stl_algo.h: En la función ‘_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std::random_access_iterator_tag) [con _RandomAccessIterator = char*, _Predicate = std::unary_negate<bool> (*)(EsDigito)]’:
/usr/include/c++/4.6/bits/stl_algo.h:4427:41:   instanciado desde ‘_IIter std::find_if(_IIter, _IIter, _Predicate) [con _IIter = char*, _Predicate = std::unary_negate<bool> (*)(EsDigito)]’
prueba.cpp:36:38:   instanciado desde aquí
/usr/include/c++/4.6/bits/stl_algo.h:210:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
/usr/include/c++/4.6/bits/stl_algo.h:214:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
/usr/include/c++/4.6/bits/stl_algo.h:218:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
/usr/include/c++/4.6/bits/stl_algo.h:222:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
/usr/include/c++/4.6/bits/stl_algo.h:230:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
/usr/include/c++/4.6/bits/stl_algo.h:234:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
/usr/include/c++/4.6/bits/stl_algo.h:238:4: error: no se puede convertir ‘* __first’ de ‘char’ a ‘EsDigito’
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.902


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: unary_negate
« Respuesta #5 en: 7 Abril 2014, 23:56 pm »

Si, seguramente, si seguis el ejemplo de la pagina de referencia que te deje podes solucionarlo (yo ya lo hice). Tene en cuenta que:

std::unary_negate<IsOdd_class> IsEven_object (IsOdd_object);

En tu caso tiene que ser un objeto de tu clase como:
EsDigito esdigito;


PD. No tenemos tu progreso del codigo, solo podemos adivinar y el codigo original no era compilable por otros detalles tampoco (letras no existe por ejemplo).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DvNe

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: unary_negate
« Respuesta #6 en: 8 Abril 2014, 17:46 pm »

Ya lo resolví tenias razón muchas gracias
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.902


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: unary_negate
« Respuesta #7 en: 8 Abril 2014, 18:59 pm »

De nadas  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines