Einfaches Template Problem
-
Hallo,
Ich programmiere selten in C++ und kenn mich mit Templates kaum aus.
Deshalb versuche ich mich dort weiterzubilden.
Ich hatte diesen Code in einem Beispiel zu Templates gefundentemplate<class ItemType> void Insert(NodeType<ItemType>*& listPtr, ItemType item) { if (listPtr == NULL || item < listPtr->info) { // Save current pointer. NodeType<ItemType>* tempPtr = listPtr; // Get a new node. listPtr = new NodeType<ItemType>; listPtr->info = item; listPtr->next = tempPtr; } else Insert(listPtr->next, item); }
Es kompiliert aber nicht, wenn ich es in diesem Programm verwende:
#include <iostream> using namespace std; template<class ItemType> void Insert(NodeType<ItemType>*& listPtr, ItemType item) { if (listPtr == NULL || item < listPtr->info) { // Save current pointer. NodeType<ItemType>* tempPtr = listPtr; // Get a new node. listPtr = new NodeType<ItemType>; listPtr->info = item; listPtr->next = tempPtr; } else Insert(listPtr->next, item); } struct A { int info; A *next; }; int main() { A *b=new A; A *c=new A; c->info=3; b->info=2; Insert(b, 3); cout << b->info << " - " << b->next->info << endl; }
Ich habe vermutet, dass der Code fehlerhaft ist. Ich kann mir z.B. nicht erklären was NodeType<ItemType> im Funktionskopf bedeuten soll.
Hab den Code dann umgeschrieben und jetzt funktioniert es
template<class ItemType, class NodeType> void Insert(NodeType *& listPtr, ItemType item) { if (listPtr == NULL || item < listPtr->info) { // Save current pointer. NodeType * tempPtr = listPtr; // Get a new node. listPtr = new NodeType; listPtr->info = item; listPtr->next = tempPtr; } else Insert(listPtr->next, item); }
Ich frag mich jetzt ob der ursprüngliche Code wirklich fehlerhaft war oder ob ich ihn nur falsch verwendet habe.
-
Also ich vermute jetzt in dem Quellcode fehlte nur die Definition von NodeType
template<class ItemType> class NodeType { public: ItemType info; NodeType *next; };