Una de c/c++

Buenas
He intentado encontrar el hilo oficial de c/c++ pero a resultado que no he topado con él, por eso pregunto en este nuevo hilo.
Supongamos que tengo un
char *h;
TDateTime hora;
bjAct.SetHora(static_cast(h).c_str()) = hora.DateString();

y recibo el siguiente error:
Cannot Convert char * to TDateTime.
Alguien sabe cómo podria resolver este error de tipos?

Gracias
Siento no poder ayudarte, ya que yo no paso de C :P

Aun asi, aqui tienes el enlace al hilo oficial para otra ocasion :)
Sin entender el codigo, la impresión que me da que estas pasandole un char* cuando pide un TDateTime. Mirate la definición de las funciones
bjAct.SetHora (static_cast(h).c_str() ) = hora.DateString();

para empezar haces un cast de un puntero a char a un AnsiString. ¿Estas seguro de que quieres hacer eso? Además después de hacer el casting a un AnsiString retornas un string de C. ¿No es dar muchas vueltas para llegar a lo mismo (un puntero a char)?

En cualquier caso el fallo radica en que static_cast(h).c_str() devuelve un char* y el método SetHora, a falta de conocer el típo del objeto bjAct, parece necesitar un TDateTime, pero viéndolo así es imposible saber qué demonios estás haciendo.

Falta toda la información sobre el método SetHora y el tipo de objeto que es bjAct.
Qué potaje de código. Nunca me gustó meter 40 paréntesis y corchetes dentro de un código si no es necesario...

Yo de momento no sé demasiado de c++, aún estoy en el primero año, pero yo diría que lo que tienes que pasarle a SetHora es un TDateTime y no un casting a ansistring (vete tú a saber qué es eso xd) que después vuelves a pasar a string...y encima a todo eso le asignas la hora.DateString()

Será que no tengo ni idea de c++, pero yo diría que eso no tiene sentido xd
Zor escribió:.y encima a todo eso le asignas la hora.DateString()

Será que no tengo ni idea de c++, pero yo diría que eso no tiene sentido xd

Bueno, eso aparte; en mi comentario lo obvié para no meter mas el dedo en la llaga, pero asignar un string al resultado de una función llamada SetHora (que al ser un SetXXX es más que probable que devuelva void, o como mucho un código con el resultado de esa operación) uff es que no se ni como el compilador no te peta con eso... xD
Alguien sabe cómo podria hacer si tengo en una variable almacenado un int para buscarlo en un deque de ints; ver si esta y eliminarlo?

Gracias
Simple:

// Asumiendo 'std::deque<int> dq;'
std::deque<int>::iterator it;

for (it = dq.begin(); it != dq.end(); it++)
    if (*it == tuint)
        dq.erase(it);


Otra forma es utilizar std::remove(), pero no hace lo que esperas que haga, asi que asegurate de entender lo que hace antes de usarla. (Es infinitamente mas elegante claro):

std::deque<int>::iterator lst;
lst = std::remove(dq.begin(), dq.end(), tuint);


- ferdy
¿un deque de ints? ¿y eso qué es? xdd

Cuando lo leí pensé que se refería a una expresión tipo "un tocho de ints", pero resulta que existe xd

Por cierto, ya que estoy en el hilo...

En clase usamos TurboC, pero estoy hasta los coj*** de ese kutre-compilador de 1992, así que me bajé el Dev c++, por eso de que es libre y tal, y para no desentonar con la clase me instalé la compatibilidad con la librería conio.h, para usar el gotoxy y esas paridillas...

El caso es que aún así, algunas funciones vitales como "delay()" o "random() & randomize()" no están (serán también de borland supongo), y no sé qué alternativas hay a dichas funciones. Todo esto hablando de modo consola, claro.

Sino hay alternativas fáciles, tal vez me tenga que pasar a otro compilador. Básicamente es para hacer programas en modo consola, que a las APIS de Windows y todo eso no hemos llegado aún (y lo que nos queda...un año más xD).

¿dev c++ me sirve o hay otros más "compatibles" con lo que doy en clase, que no sea el cutre TurboC?
Es una especie de vector que permite inserciones con complejidad constante al principio y al final de la estructura.
(Double Ended QUEue)

http://geneura.ugr.es/~gustavo/stl/deque.html

Y aquí un artículo sobre las diferencias entre vector y deque un estudio bastante completo, si me pregutas
http://www.codeproject.com/vcpp/stl/vector_vs_deque.asp

Delay puedes sustituirla de forma ´por un sleep() si estás en windows, pero necesitas incluir un fichero de encabezado perteneciente a la API de windows, lo que no debería ser un problema.
#include
void sleep(DWORD milisegundos)


DWORD está definido como un entero de 32 bits (Double WORD)

Si quieres que te quede más 'bonico' implementa la función delay así:

#include
void delay (int milisegundos)
{
sleep (milisegundos);
}


Respecto a las funciones randomize() y random() tienes en este hilo un post mío que te explica cómo hacértelas tú mismo en 10 líneas.
En realidad son un apaño con macros ya que las funciones estándar equivalentes son srand() y rand() respectivamente, pero te pueden servir para compilar el mismo código en clase y aquí.

Increible que se use todavía el turbo c++ teniendo el Dev-c++ o el CodeBlocks, éste último muy recomendable. Y eso por poner dos entornos libres y gratuitos.
este documento Lo ecribí por el 2003 y habrá algunas opciones de compilación que no estén explicadas, pero yo creo que aún servirá.

Un saludo
Por cierto, para el Dev-C++ a lo mejor te interesa
Ahora que hablamos de DEQUEs [beer] Se me ocurre una pregunta, el DEQUE contiene la función miembro unique() pero tengo una duda en su funcionamiento...
Digamos que en un DEQUE tengo objetos que almacenan personas, y para mi dos personas son distintas si tienen un numero de DNI distinto, digamos que tengo ya cargado el DEQUE de PERSONAS y cabe la posibilidad de que el usuario meta sus datos y por casualidad alguien igual repite el numero de DNI... podria aplicar el unique( ) para evitar que hubiera en el DEQUE objetos con el atributo DNI repetido???
el DEQUE contiene la función miembro unique()


¿ Desde cuándo ?

Digamos que en un DEQUE tengo objetos que almacenan personas, y para mi dos personas son distintas si tienen un numero de DNI distinto, digamos que tengo ya cargado el DEQUE de PERSONAS y cabe la posibilidad de que el usuario meta sus datos y por casualidad alguien igual repite el numero de DNI... podria aplicar el unique( ) para evitar que hubiera en el DEQUE objetos con el atributo DNI repetido???


Tienes varias formas, lo más fácil es que sobrecargues el operador '==' de Persona y utilizes std::find para comprobar que existe:

/*
* asumiendo:
*    std::dequeue<Persona> dq;
*    std::dequeue<Persona>::iterator res;
*    Persona operator== está implementado para comprobar por DNI.
*    Quieres comprobar si 'unaPersona' existe.
*/
res = find(dq.begin(), dq.end(), unaPersona);

if (res != dq.end()) {
    // La persona existe y la tienes en *res
} else {
    // La persona no existe
}


Otra forma es utilizar std::find_if.

(PD: std::find y std::find_if están en la cabecera 'algorithm')

- ferdy
11 respuestas