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
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
? ¿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.