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?
Prueba si te funciona la lista con tipos predefinidos(int por ejemplo)
Pega el código de la lista ;)
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
Sips, tiene toda la pinta de que ha puesto la implementación en el .cpp
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 ? ..
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
aaaahhh vaaaaleeeee XDDDDD
;**
;***
;******
;@
:C====(_(_)
no esperaba eso de ti
8C=8
ni yo eso de ti
d|ò·Ó|b