Probleme mit Templates
-
Ich versuche Gerade eine Klasse zu schreiben und habe schon Probleme beim Konstruktor

template <class itemType> class Sortieren { public: int l; int r; int Prozessoren; itemType *a; template <class itemType> Sortieren<itemType>::Sortieren(itemType a[], int l, int r, int Prozessoren){ Sortieren::a=a; Sortieren::l=l; Sortieren::r=r; Sortieren::Prozessoren=Prozessoren; } };und die Main Funktion:
int main (void) { int *pArray = new int[10]; pArray[0]=1; pArray[1]=7; pArray[2]=19; pArray[3]=53; pArray[4]=42; pArray[5]=17; pArray[6]=19; pArray[7]=12; pArray[8]=99; pArray[9]=11; Sortieren <int> s(pArray,0,9,2);Und die Fehler:
G:\BatcherSort\BatcherSort.cpp(21) : error C2039: '__ctor' : Ist kein Element von 'Sortieren<
template-parameter513'>' G:\\BatcherSort\\BatcherSort.cpp(141) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Sortieren<int>' G:\\BatcherSort\\BatcherSort.cpp(21) : error C2931: 'Sortieren<template-parameter513'>' : ID der Vorlagenklasse wurde als Member-Funktion von 'Sortieren<int>' neu definiert
G:\BatcherSort\BatcherSort.cpp(141) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Sortieren<int>'
G:\BatcherSort\BatcherSort.cpp(141) : error C2078: Zu viele Initialisierungen
G:\BatcherSort\BatcherSort.cpp(141) : error C2440: 'initializing' : 'const int' kann nicht in 'class Sortieren<int>' konvertiert werden
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig
Fehler beim Ausführen von cl.exe.Für mich sah das zuerst so aus, als ob es schon eine Klasse "Sortieren"
gäbe, aber ich habe definitiv noch so keine erstellt und auch wenn ich den Namen ändere bleiben diese 4 Fehler!Bitte helft mir, ich verzweifele damit eine möglichst allgemeine Klasse zu schreiben, die dieses !"§$%& Array sortieren kann!
(Das komische ist den Sortieralgorithmus alleine habe ich schon fertig und der Funktioniert
template <class itemType > void QuickSort(itemType a[], int l, int r) { static itemType m; static indexType j; indexType i; itemType x; if(r > l) { m = a[r]; i = l-1; j = r; for(;;) { while(a[++i] < m); while(a[--j] > m); if(i >= j) break; // swap(a[i], a[j]); x=a[i]; a[i]=a[j]; a[j]=x; } // std::swap(a[i],a[r]); x=a[i]; a[i]=a[r]; a[r]=x; QuickSort(a,l,i-1); QuickSort(a,i+1,r); } }Wenn dieser Code nicht in der Klasse steht ist er mit dem Aufruf
QuickSort<int>(pArray,0,9);in der Main Funktion (weiter oben) ausfürbar!
-
template <class itemType> class Sortieren { public: Sortieren(itemType a[], int l, int r, int Prozessoren) { // uswps: versuche es zu vermeiden parameter gleich zu benennen wie member und lese dir mal was über "initialisierungsliste" durch
-
Hallo, ich habe es jetzt so:
template <class itemType> class Sortieren { public: itemType *a; int l; int r; int Prozessoren; public: Sortieren(itemType A[], int L, int R, int PROZESSOREN): a(A),l(L),r(R),Prozessoren(PROZESSOREN) { }Ist das so in Ordnung jetzt?
(Ich bin für jede Hilfe und auch Kritik dankbar, da ich versuche mir alles selbst beizubringen und gewisse Themen nicht finde, weil ich einfach nicht erwartet habe das sie existieren, wie die initialisierungsliste. Da ich nur Java gewöhnt bin und dort sowas nicht existiert (tut es doch nicht oder?))PS. Gibt es sonst noch "Überraschungen" mit denen man reinfallen kann, wenn man von Java auf c++ wechselt (außer den Zeigern und der Initialisierungsliste)?
-
der ctor sieht jetzt vernünftig aus. (die [] gefallen mir persöhnlich nicht, ist aber geschmachssache
)warum sind deine member public?
stilfrage: ich benutze gerne aussagekräftige bezeichnungen