Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Solucionado]Consulta sobre el uso de template
Autor Mensaje
John_Doe* Sin conexión
Profesor del Modulo A
Steampowered
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 307
Agradecimientos dados: 18
Agradecimientos: 60 en 41 posts
Registro en: Dec 2012
Mensaje: #1
[Solucionado]Consulta sobre el uso de template Ejercicios Informática II (Electrónica)
Antes que nada, estuve buscando sobre el uso de templates en internet y sobre todo en que radica mi problema pero hasta ahora no encontre nada muy satisfactorio. Para no perder mas tiempo dejo la consulta en el foro a ver si alguno sabe en que me puedo estar equivocando.

Les dejo las partes pertinentes del codigo, cualquier cosa el resto lo edito. Aclaro: La clase esta reducida, no tiene los constructores ni otras funciones que uso. Si la llegasen a necesitar, edito.

El problema lo tengo con el siguiente ejercicio:

Modificar el punto anterior para permitir la suma (+), resta (-) y asignación Feer de objetos tipo Punto.
Nota: tener en cuenta que las operaciones de deben controlar que los valores de x e y, no desborden el rango de +/- 1000.
No utilizar friend, para realizar la sobrecarga de los operadores suma (+) y resta (-).

Como preguntas / restriccion:

¿Requiere sobrecargar el operador de asignación Feer? ¿Por qué?

Justifique la ejecución de la línea q=r+47; (como se produce la suma entre el objeto Punto y el objeto int, suponiendo que mantuvo la consigna de escribir lo menos posible y no sobrecargó la suma de Punto con int)

Con respecto al codigo:



class Punto
{
private:
double mx;
double my;

public:
template <class T> Punto operator +(const T &);
};


Con respecto a la sobrecarga del operador +:



template <class T> Punto Punto::operator +(const T &op)
{
Punto C;

if(sizeof(T) == sizeof(Punto))
{
C.setPunto(mx + op.mx, my + op.my);
}
else
{
C.setPunto(mx + op, my);
}

return C;
}


Ahora en el main cuando algo como:

A = B + C; (siendo A, B y C objetos Punto). Obtengo el siguiente error:

Cita:main.cpp:18: error: undefined reference to `Punto Punto::operator+<Punto>(Punto const&)'

Mi idea es sobrecargar el operador + para poder sumar tanto mis objetos Punto como otros tipos (no me refiero a otros objetos).
De lo que estuve leyendo sobre templates evito inicializar con un tipo de variable a la funcion miembro operador + despues de haber instanciado uno o mas objetos punto.
O sea no hago:

A = B +<Punto>C;

Si necesitan mas aclaraciones, el codigo completo o algo en particular; edito el post. De momento sigo buscando las maneras de arreglar mi error o de usar debidamente el template.
Por si les interesa el uso de template lo estuve leyendo en:
Template para dummies

Una de las paginas mas completas en el uso del template que encontre en estos dias de busqueda.

[Imagen: 335x50sfm_1.gif]
(Este mensaje fue modificado por última vez en: 21-04-2013 17:53 por John_Doe*.)
13-04-2013 20:10
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
John_Doe* Sin conexión
Profesor del Modulo A
Steampowered
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 307
Agradecimientos dados: 18
Agradecimientos: 60 en 41 posts
Registro en: Dec 2012
Mensaje: #2
RE: Consulta sobre el uso de template
Espacio en blanco innecesario.

[Imagen: 335x50sfm_1.gif]
(Este mensaje fue modificado por última vez en: 21-04-2013 17:53 por John_Doe*.)
20-04-2013 13:17
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
John_Doe* Sin conexión
Profesor del Modulo A
Steampowered
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 307
Agradecimientos dados: 18
Agradecimientos: 60 en 41 posts
Registro en: Dec 2012
Mensaje: #3
RE: Consulta sobre el uso de template
Actualizacion:
Solucione el problema por asi decirlo, en resumidas cuentas es un problema exclusivo del linker. Una solucion rapida seria mover la implemetancion de la funcion en la firma dentro de la clase.
No me voy a explayar mucho en porque ocurre esto pero concretamente la implemetacion del template que se encuentra en el header tiene que ser visible dentro del cpp donde estan los desarrollos. El compilador se desliga el problema y para cuando el linker actua no hay tiempo para solucionarlo; esto ocurre aun agregando el .h dentro del .cpp.
Hay varias formas de solucionar esto pero les dejo estas paginas para que lean sobre el uso debido de templates (aparte de la pagina de arriba):

http://www.codeproject.com/Articles/3515...ource-Code
http://www.codeproject.com/Articles/4857...le-and-imp

Comentario aparte: no se recomienda el uso del modificador export ya que no esta soportado por el grueso de los compiladores y su implementacion en los que si esta suele ser compleja.

Se puede cerrar el thread.

[Imagen: 335x50sfm_1.gif]
21-04-2013 17:51
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.