Templates: Vorlagen Argumentliste erforderlich
-
bisher habe ich immer mit typedef klassen erstellt, um sich universell nutzbar zu machen.
jetzt habe ich das ganze mal mit templates angeschaut. leider klappt das nicht so ganz.
hier meine klassendefinition:
#ifndef NODE_H #define NODE_H #include <iostream.h> template<class T> class Node{ public: T daten; Node *left; Node *right; public: Node(T d) :daten(d), left(NULL), right(NULL) {} }; #endifnun kommt immer die meldung vom compiler:
Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
jetzt habe ich nochmal im konstruktor versucht:
template<class T>
Node(T d)
:daten(d), left(NULL), right(NULL)geht aber auch nicht.
weiss jemand rat?
die klasse teste ich übrigens mit folgendem code:
#include "node.h" int main() { Node knoten = new Node(22); return 0; }
-
new Node<int>(22);
-
Node<double>* knoten = new Node<double>(22);
-
volkard schrieb:
Node<double>* knoten = new Node<double>(22);
22 ist eher ein int
-
ach doch so einfach.
jedoch habe ich immer noch einen fehler:
class Node<int> *' kann nicht in 'class Node<int>' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutigmuss ich noch was an der definition ändern?
-
wuschelz schrieb:
ach doch so einfach.
jedoch habe ich immer noch einen fehler:
class Node<int> *' kann nicht in 'class Node<int>' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutigmuss ich noch was an der definition ändern?
new gibt die Adresse zurück, an welcher das Objekt Node<int> konstruiert wurde und abgelegt ist. D.h. du musst diese Adresse in einem Zeiger speichern.
#include "node.h" int main() { Node<int>* knoten = new Node<int>(22); ... delete knoten; // nicht vergessen return 0; }Caipi
-
integer-profi schrieb:
volkard schrieb:
Node<double>* knoten = new Node<double>(22);
22 ist eher ein int
containerklassen entwickelt und testet man aber mit double.
das macht man nähmlich, weil man sonst ganz durcheinander wird, wenn man man den daten-typ (double) und den größen-typ (size_t und auch mal int) verwechselt.
-
ok, jetzt hab ich es, danke.
irgendwie habe ich das template konzept verstanden. aber irgendwie sind die gar nicht so einfach zu benutzen

ich geh erst nochmal in klausur, bevor ich euch mit weiteren fragen nerve

-
Da du ja bisher typedefs schon verwendest hast, kannst du auch für deine eigenen Template-Klassen typedefs erstellen und benutzen:
typedef Node<int> MyNode; MyNode* knoten = new MyNode(22); // ... delete knoten; // nicht vergessen