Título: template en function [codigo] Publicado por: bash en 13 Febrero 2016, 13:32 pm Saludo a todos !!
Con el proposito de aprender estructura de datos estoy haciendo una clase para tener una especie de lista enlazadas , estoy usando template y como todos sabemos los templates se deben definir dentro del mismo header(c++98) entonces le cuento tengo una estructura llamado nodo que esta basada en plantilla y tiene de variables , un puntero al nodo siguiente y el dato a almacenar en esa instancia, luego tengo la clase lista que tiene el nodo a la cabeza de node y tengo una funcion que me devuelve un nodo el problema me lo da al compilar es el siguiente : ../src/LinkList.h:66:50: error: invalid cast from type ‘Object’ to type ‘void*’ head_traits = (T) createNode((void *)data); me gustaira saber si hay perdidas de datos cuando forzo a compilar con static_cast<void *> , el codigo solo compilar si uso eso si no :D es otra cosa. dejare el codigo... Código
gracias de antemano.!! Título: Re: template en function [codigo] Publicado por: Stakewinner00 en 13 Febrero 2016, 14:15 pm creo que tendría que ser con el puntero a data, es decir.
Código: head_traits = (T) createNode((void *)&data); Código con los casts de C++ como static_cast no fuerzas nada, solo muestras explícitamente el tipo de cast que estas haciendo para que sea más legible A modo de aclaración, del libro de "The C++ Programming language de Stroustrup sobre los "C-style cast" Citar From C, C++ inherited the notation(T)e, which performs any conversion that can be expressed as a combination ofstatic_casts,reinterpret_casts,const_casts to make a value of typeT from the expressione(§44.2.3). Unfortunately, the C-style cast can also cast from a pointer to a class to a pointer to a private base of that class. Never do that, and hope for a warning from the compiler if you do it by mistake. This C-style cast is far more dangerous than the named conversion operators because the notation is harder to spot in a large program and the kind of conversion intended by the programmer is not explicit. That is,(T)e might be doing a portable conversion between related types, a nonportable conversion between unrelated types, or removing theconstmodif i er from a pointer type. Without knowing the exact types ofTande, you cannot tell. |