hi @ll...
ich will grad eine einfache list schreiben.
kann mir wer erklären, warum es zwar funzt wenn ich den ctor u. dtor direkt in der klasse in list.h definier, es aber nicht funzt, wenn ich ihn außerhalb in list.cpp definier!?
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//list.h
template <class T> class list
{
private:
struct ListItem
{
T item;
ListItem* pPrev;
ListItem* pNext;
};
ListItem* pFirst;
ListItem* pLast;
public:
void AddItem( T item );
list() {};
~list() {};
};
//list.cpp
#include "list.h"
template <class T> void list<T>::AddItem( T item )
{
return;
}
/*
will nicht, natürlich tu ich dann in list.h nur deklarieren nicht definieren...
template <class T> list<T>::list()
{
}
template <class T> list<T>::~list()
{
}
*/
//instantiert wird so:
list< EdgeVertex > vlist;
|
erst durch das instantieren tritt der fehler auf, es schaut aus als ob der compiler nicht richtig generiert, weil der linker meckert dass ers nicht findet...der compiler meckert aber bei keiner der beiden varianten.
folgende linker fehlermeldungen:
error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall list<class EdgeVertex>::~list<class EdgeVertex>(void)" (??1?$list@VEdgeVertex@@@@QAE@XZ)
error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall list<class EdgeVertex>::list<class EdgeVertex>(void)" (??0?$list@VEdgeVertex@@@@QAE@XZ)
fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.