Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: CoLSoN2 en 28 de Diciembre de 2002, 03:39:15 AM

Título: Problemas con templates
Publicado por: CoLSoN2 en 28 de Diciembre de 2002, 03:39:15 AM
                                veamos, tengo 3 ficheros (3 h y 3 cpp):
cJugador, cManager y tLista
- tLista es un template para listas doblemente enlazadas
- Jugador se sobreentiende
- manager es un manager de jugadores, que contiene una lista de ellos

pues bien, si en el manager tengo


lista<jugador> c00llist;


y luego en los metodos hago


c00llist.Add(jugador1);

c00llist.Delete(jugador1)

etc


me da estos errroes en el linkeo:


APP_tManager.obj : error LNK2001: unresolved external symbol "public: void __thiscall W3C_APP_List<class W3C_APP_Player>::Delete(int)" (?Delete@?$W3C_APP_List@VW3C_APP_Player@@@@QAEXH@Z)


<- 1 x cada metodo de la lista llamado dsd el manager

sabeis que pasa?                                
Título: ...
Publicado por: Grugnorr en 28 de Diciembre de 2002, 10:28:58 AM
                                Prueba si te funciona la lista con tipos predefinidos(int por ejemplo)

Pega el código de la lista ;)                                
Título: Problemas con templates
Publicado por: ethernet en 28 de Diciembre de 2002, 11:32:04 AM
Mas claro el agua, no encuentra las implementaciones de la clase. Recuerda poner todas las implementaciones en los .h.

Por q no usas std::list ?

saludos
Título: ...
Publicado por: Grugnorr en 28 de Diciembre de 2002, 12:00:31 PM
                                Sips, tiene toda la pinta de que ha puesto la implementación en el .cpp                                
Título: Problemas con templates
Publicado por: CoLSoN2 en 28 de Diciembre de 2002, 06:34:42 PM
                               
CitarPega el código de la lista
aquí está:


template <class T>

class W3C_APP_List

{

public:

struct sITEM {

 T dt;

 int id;

};

struct sLISTNODE {

 sITEM data;

 sLISTNODE *next;

 sLISTNODE *prev;

 sLISTNODE() {

  next = NULL;

  prev = NULL;

 }

 ~sLISTNODE()

 {

  if (next) delete next;

  if (prev) delete prev;

 }

};



sLISTNODE *first;

int numElements;



W3C_APP_List() {

 first = NULL;

 numElements = 0;

}

~W3C_APP_List() { DeleteAll(); }

int Add(const T temp);

void Delete(const int id);

void DeleteAll();

};



/*

* lista.cpp

*/

template <class T>

int W3C_APP_List<T>::Add(const T temp)

{

sLISTNODE *pnode = first;

int ID = 0;



if (!pnode)

{

 pnode = new sLISTNODE();

 pnode->next = NULL;

 pnode->prev = NULL;

 pnode->data.id = ID;

 pnode->data.dt = T;     // operador '=' sobrecargado

}

else

{

 ID++;

 while (pnode->next)

 {

  pnode = pnode->next;

  ID++;

 }

 pnode->next = new sLISTNODE();

 sLISTNODE *aux = pnode;

 pnode = pnode->next;

 pnode->next = NULL;

 pnode->prev = aux;

 pnode->data.id = ID;

 pnode->data.dt = T;

}



numElements++;



return ID;

}



template <class T>

void W3C_APP_List<T>::DeleteAll()

{

for (int i=0;i<numElements;i++)

{

 Delete(i);

}

}



template <class T>

void W3C_APP_List<T>::Delete(int ID)

{

sLISTNODE *pnode = first;



while(pnode->data.id != ID)

 pnode = pnode->next;



if (!pnode->prev)

{

 pnode->next->prev = NULL;

 first = pnode->next;

}

else

{

 pnode->prev->next = pnode->next;

}



delete pnode;

}





Citar
Por q no usas std::list ?  
porque me liaba, aunque quizá lo intente XD


Citar
Sips, tiene toda la pinta de que ha puesto la implementación en el .cpp
dónde voy aponer las implementaciones sino es en el cpp ? ..                                
Título: Problemas con templates
Publicado por: ethernet en 28 de Diciembre de 2002, 07:43:53 PM
Las implementaciones de funciones con templates se ponen en el .h. Ahora entenderas el porq yo hago eso amenudo y me criticas(ais) xD.

saludos
Título: Problemas con templates
Publicado por: CoLSoN2 en 28 de Diciembre de 2002, 08:17:34 PM
                                aaaahhh vaaaaleeeee XDDDDD

;**                                
Título: Problemas con templates
Publicado por: ethernet en 28 de Diciembre de 2002, 09:55:13 PM
;***
Título: Problemas con templates
Publicado por: CoLSoN2 en 28 de Diciembre de 2002, 10:16:44 PM
                                ;******                                
Título: Problemas con templates
Publicado por: ethernet en 28 de Diciembre de 2002, 10:33:36 PM
;@
Título: Problemas con templates
Publicado por: CoLSoN2 en 28 de Diciembre de 2002, 10:43:47 PM
                                :C====(_(_)                                
Título: Problemas con templates
Publicado por: ethernet en 28 de Diciembre de 2002, 10:46:01 PM
no esperaba eso de ti

8C=8
Título: Problemas con templates
Publicado por: CoLSoN2 en 28 de Diciembre de 2002, 11:36:22 PM
                                ni yo eso de ti

d|ò·Ó|b