plantillas
Publicado por Franco Cedillo (4 intervenciones) el 10/08/2005 23:42:44
hola,
estoy usando un archivo de Tabla.h el cual contiene una plantilla para una clase y lo uso en mi programa TablaCad.
//Tabla.h
#ifndef T_TABLA
#define T_TABLA
template <class T>
class Tabla {
public:
Tabla(int nElem);
~Tabla();
T& operator[] (int indice) { return pT[indice]; }
int NElementos() const { return nElementos; }
private:
T *pT;
int nElementos;
};
// Definición:
template <class T>
Tabla<T>::~Tabla() {
delete[] pT;
}
#endif
aki el archivo Tabla.cpp
#include <iostream>
#include <cstring>
#include <cstdio>
#include "Tabla.h"
using namespace std;
const int nElementos = 5;
using namespace std;
int main() {
Tabla<char *> TablaCad(nElementos);
char cadena[20];
for(int i = 0; i < nElementos; i++) {
sprintf(cadena, "Numero: %5d", i);
TablaCad[i] = cadena;
}
strcpy(cadena, "Modificada");
for(int i = 0; i < nElementos; i++)
cout << "TablaCad[" << i << "] = "
<< TablaCad[i] << endl;
cin.get();
return 0;
}
se produce un error de tipo linker error
y no entiendo esto porque no hubo problemas en el trabajo con int y float
#include <iostream>
#include "Tabla.h"
using namespace std;
const int nElementos = 10;
int main() {
Tabla<int> TablaInt(nElementos);
Tabla<float> TablaFloat(nElementos);
for(int i = 0; i < nElementos; i++)
TablaInt[i] = nElementos - i;
for(int i = 0; i < nElementos; i++)
TablaFloat[i] = 1/(1+i);
for(int i = 0; i < nElementos; i++) {
cout << "TablaInt[" << i << "] = "
<< TablaInt[i] << endl;
cout << "TablaFloat[" << i << "] = "
<< TablaFloat[i] << endl;
}
cin.get();
return 0;
}
pero sí con el código en el que uso char.
saludos.
estoy usando un archivo de Tabla.h el cual contiene una plantilla para una clase y lo uso en mi programa TablaCad.
//Tabla.h
#ifndef T_TABLA
#define T_TABLA
template <class T>
class Tabla {
public:
Tabla(int nElem);
~Tabla();
T& operator[] (int indice) { return pT[indice]; }
int NElementos() const { return nElementos; }
private:
T *pT;
int nElementos;
};
// Definición:
template <class T>
Tabla<T>::~Tabla() {
delete[] pT;
}
#endif
aki el archivo Tabla.cpp
#include <iostream>
#include <cstring>
#include <cstdio>
#include "Tabla.h"
using namespace std;
const int nElementos = 5;
using namespace std;
int main() {
Tabla<char *> TablaCad(nElementos);
char cadena[20];
for(int i = 0; i < nElementos; i++) {
sprintf(cadena, "Numero: %5d", i);
TablaCad[i] = cadena;
}
strcpy(cadena, "Modificada");
for(int i = 0; i < nElementos; i++)
cout << "TablaCad[" << i << "] = "
<< TablaCad[i] << endl;
cin.get();
return 0;
}
se produce un error de tipo linker error
y no entiendo esto porque no hubo problemas en el trabajo con int y float
#include <iostream>
#include "Tabla.h"
using namespace std;
const int nElementos = 10;
int main() {
Tabla<int> TablaInt(nElementos);
Tabla<float> TablaFloat(nElementos);
for(int i = 0; i < nElementos; i++)
TablaInt[i] = nElementos - i;
for(int i = 0; i < nElementos; i++)
TablaFloat[i] = 1/(1+i);
for(int i = 0; i < nElementos; i++) {
cout << "TablaInt[" << i << "] = "
<< TablaInt[i] << endl;
cout << "TablaFloat[" << i << "] = "
<< TablaFloat[i] << endl;
}
cin.get();
return 0;
}
pero sí con el código en el que uso char.
saludos.
Valora esta pregunta


0