Autor
|
Tema: unary_negate (Leído 2,002 veces)
|
DvNe
Desconectado
Mensajes: 12
|
Buenas estoy escribiendo la siguiente funcion #include <iostream> #include <cstring> #include <functional> #include <algorithm> using namespace std; class EsDigito { public: bool operator () (const char & c ) const { return isdigit(c ); }}; int main() { unary_negate<bool> EsAlfabetico (EsDigito); char letras2[] = " 452485A56321"; inicio = letras; fin = letras + sizeof(letras)/sizeof(char); if (find_if(inicio,fin,EsAlfabetico())) cout << "Alfabetico" << endl; return 0; }
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
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 12
|
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
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 12
|
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
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 12
|
Ya lo resolví tenias razón muchas gracias
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
|
|
|
|