A ver, comento, creo que mi último mensaje se puede olvidar y sigo desde aquí, ya que investigando he realizado algunas modificaciones y creo que la cosa va ligeramente mejor aunque sigue fallando.
Spair.h
Al querer declarar esta clase como plantilla, he visto que tengo que meter todo en el mismo archivo de cabecera .h y me queda tal que así. En este, he echo la trampa de renombrarlo .cc y añadir al final una función main con un simple return 0 y la compilación funcionaba sin darme ningún error por lo que creo que esta, ya está funcionando correctamente y se queda tal que así.
Código:
#include <iostream>
using namespace std;
template <class T, class U>
class spair {
public:
// Constructor
spair (T x, U y);
spair ();
// Observadores
T RetAbscisa () const;
U RetOrdenada () const;
// Asignacion
T SetAbscisa (T abs);
U SetOrdenada(U ord);
private:
T abscisa;
U ordenada;
};
template<class T, class U>
spair<T,U>::spair(const T a, const U o){
abscisa = a;
ordenada = o;
};
template<class T, class U>
T spair<T,U>::RetAbscisa () const {
return abscisa;
}
template<class T, class U>
T spair<T,U>::SetAbscisa(T abs){
abscisa = abs;
}
template<class T, class U>
U spair<T,U>::RetOrdenada () const {
return ordenada;
}
template<class T, class U>
U spair<T,U>::SetOrdenada (U ord){
ordenada = ord;
}
Punto.h
Código:
#include <iostream>
#include <nspair.h> // La nueva versión de Spair la he llamado nspair.h de ahí el cambio
//using namespace std;
class punto
{
public:
// constructores
punto (); // punto (0,0)
punto (const int x, const int y); // punto (x,y)
punto (const punto & rhs);
// asignacion
void operator = (const punto & rhs);
// observadores
int abcisa () const;
int ordenada () const;
private:
// area de datos
// Un par de enteros (x:ordenada, y:abcisa)
spair<int, int> data;
};
Punto.cc
Aquí es donde estoy encontrandome el problema, ya que no se si estoy usando correctamente el constructor. Ya que punto, quiero que se base en la declaración de Spair e igual estoy metiendo la pata a la hora de implementarlo
Código:
#include <punto.h>
punto::punto(const int a, const int o){
data = spair<int,int> (a,o);
};
El error que me da al compilar es el siguiente
Código:
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: En la función `_start':
(.text+0x20): referencia a `main' sin definir
/tmp/cc6F2l2c.o: En la función `punto::punto(int, int)':
punto.cc:(.text+0x1a): referencia a `spair<int, int>::spair()' sin definir
collect2: error: ld devolvió el estado de salida 1
Y luego por último, tengo Programa.cc que si lo compilo me sigue dando una lista interminable de errores aunque creo que la mayoría son porque está mal compilado punto y falla a la hora de realizar el enlazado.
Seguiré investigando sobre esta nueva versión que estoy haciendo.
Gracias, un saludo y perdón por las molestias, solo quiero aprender!