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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Ayuda con la plantilla y herencia
« en: 25 Noviembre 2016, 22:11 pm »

Hola a todos! Tengo un problema al usar una plantilla (template) para devolver un objeto.
el código que tengo es:

Código
  1.  
  2. template <typename P> P Datos::devolverPersona() {
  3. P nuevo = P(strPersona.Apellido, strPersona.Nombre, strPersona.DNI, strPersona.ID());
  4. return nuevo;
  5. }
  6.  
  7.  

El typename P puede ser entre una clase "Cliente" o "Proveedor". ambas heredan de una clase llamada Persona.

al llamar a la funcion:
Código
  1. Cliente c1 = _d1->devolverPersona<Cliente>();
  2.  

me tira un error.  larguisimo:

"Severity   Code   Description   Project   File   Line   Suppression State
Error   LNK2019   unresolved external symbol "public: class Cliente __thiscall Datos::devolverPersona<class Cliente>(void)" (??$devolverPersona@VCliente@@@Datos@@$$FQAE?AVCliente@@XZ) referenced in function "public: void __thiscall Venta::MostrarDatosDeOperacion(void)" (?MostrarDatosDeOperacion@Venta@@$$FQAEXXZ)   tp02   E:\Documentos\Diego\Programacion\c++\Sistema de Compra-Venta\tp02\tp02\Venta.obj   1"

Ayuda por favor!! Gracias


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Ayuda con la plantilla y herencia
« Respuesta #1 en: 26 Noviembre 2016, 01:03 am »

Hola Akumadie, podría ser porque tienes colocar las implementaciones de los métodos que usen programación genérica en el mismo fichero que su declaración (.hpp) o instanciar explícitamente las plantillas que vayas a usar en el ".cpp" en el que estás definiendo dichos métodos.

Por desgracia el enlazador no es capaz de realizar el enlace correctamente. Para ello se intentó incorporar la palabra reservada export en C++11, pero no se ha podido implementar correctamente y ha quedado como reservada pero en desuso. http://en.cppreference.com/w/cpp/keyword/export .

Si quieres más información:

http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file/495056#495056

Un saludo.


En línea

Regístrate en
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda con la plantilla y herencia
« Respuesta #2 en: 26 Noviembre 2016, 12:58 pm »

Pensad que cuando se compila un fichero objeto (de Datos.cpp, por ejemplo), se tieneque compilar la función. No puede compilar todas las combinaciones del template. Solo compila las que se están usando en ese momento.
Luego pues, el .cpp trata de utilizas un "typename P" que no ha sido compilado.
No lo puede compilar él porque no tiene el código.
La solución, como dice avesudra, compilar los templates cada vez que se necesiten poniéndolos en el header.
En línea

Akumadie

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda con la plantilla y herencia
« Respuesta #3 en: 28 Noviembre 2016, 13:23 pm »

Muchas Gracias!!
Me fue de mucha ayuda !!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con ejercicios de herencia
Java
mili03 3 5,013 Último mensaje 25 Junio 2010, 17:51 pm
por Leyer
[Java] Ayuda con herencia
Programación General
samyri 2 1,866 Último mensaje 19 Agosto 2014, 16:37 pm
por samyri
Ayuda con programa con herencia en C++
Programación C/C++
Y@mil 0 1,338 Último mensaje 17 Mayo 2015, 18:15 pm
por Y@mil
ayuda herencia c++
Programación C/C++
johnnyd77 0 1,393 Último mensaje 2 Noviembre 2016, 23:50 pm
por johnnyd77
Ayuda javascript (herencia + prototype)
Desarrollo Web
kgarcia994 2 2,316 Último mensaje 7 Enero 2017, 23:25 pm
por kgarcia994
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines