[C con Clase] Error copilando un ejemplo del curso de C++ con Clase
aJ
maxell1001 en gmail.com
Jue Mar 31 23:18:38 CEST 2011
Buenas,
En el ejemplo de Clase o función amiga de una plantilla → http://bit.ly/gA57Kw
, me da error copilando con GNU GCC Compiler, elimine la parte de "<>" por que me daba error con ese copilador y a la final me quedaron dos errores que no se como solucionarlos:
Log de errores :
obj\Debug\1.o||In function `main':|
D:\X\Code_Blocks\prueba_1\1.cpp|17|undefined reference to `Mostrar(tabla<int>&)'|
D:\X\Code_Blocks\prueba_1\1.cpp|19|undefined reference to `Mostrar(tabla<cadena>&)'|
||=== Build finished: 2 errors, 0 warnings ===|
A continuación mi código, yo siempre le cambio cosas al código para que no se parezca al original pero no altera la funcionalidad del programa :
3.h :
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string.h>
template <class T>
class tabla
{
public:
tabla(int n);
~tabla();
T& operator[](int indice) { return p_t[indice]; }
int dev_elem() const { return n_elem; }
friend void Mostrar(tabla<T>&);
private:
T *p_t;
int n_elem;
};
template <class T>
tabla<T>::tabla(int n) : n_elem(n)
{
p_t = new T[n_elem];
}
template <class T>
tabla<T>::~tabla()
{
delete[] p_t;
}
using std::strcpy;
using std::strlen;
class cadena
{
public:
cadena(const char *cad)
{
cad_2 = new char[strlen(cad)+1];
strcpy(cad_2,cad);
}
cadena() : cad_2(0) {}
cadena(const cadena &c) : cad_2(0) { *this = c; }
~cadena() { if(cad_2) delete[] cad_2; }
cadena &operator=(const cadena& c)
{
if(this != &c)
{
if(cad_2) delete[] cad_2;
if(c.cad_2)
{
cad_2 = new char[strlen(c.cad_2)+1];
strcpy(cad_2,c.cad_2);
}
else cad_2 = 0;
}
return *this;
}
const char* lee() const { return cad_2; }
private:
char *cad_2;
};
ostream& operator<<(ostream& os, const cadena& cad_3)
{
os << cad_3.lee();
return os;
}
2.h :
#include <iostream>
#include <cstdio>
#include <windows.h>
using namespace std;
int dev_cero( int cero = 0 );
int dev_cero( int cero)
{
return cero;
}
void fin();
void fin()
{
cout << "\n\n";
dev_cero();
system("pause");
}
1.cpp :
#include "2.h"
#include "3.h"
const int n = 5;
template<class T>
void Mostrar(tabla<T> &t);
int main()
{
tabla<int> Tabla_int(n);
tabla<cadena> Tabla_cad(n);
char cad[20];
for ( int i = 0 ; i < n ; i++ )
{
Tabla_int[i] = i;
sprintf(cad,"Cad no.: %2d.",i);
Tabla_cad[i] = cad;
}
Mostrar(Tabla_int);
cout << "\n";
Mostrar(Tabla_cad);
fin();
}
template<class T>
void Mostrar(tabla<T> &t)
{
for ( int i = 0 ; i < t.n_elem ; i++ )
{
cout << t[i] << "\n";
}
}
Fin del código...
Saludos.
Más información sobre la lista de distribución Cconclase