templates
-
class Bubble_Sort { public: template<typename T> Bubble_Sort(T array); ~Bubble_Sort(void); private: template<typename T> //<--- genau hier T m_array; };h:\C++Projekte\Sortieralgorithmen\Bubble_Sort.h(15) : error C3856: 'Bubble_Sort': Klasse ist keine Klassenvorlage
was mach ich nun falsch?
-
Aus der Klasse eine Klassenvorglage machen?
Sprich mach aus der Klasse ein Klassentemplate. Wieviel Hinweise soll dir der Compiler noch geben?template<typename T> class Bubble_Sort { public: Bubble_Sort(T array); ~Bubble_Sort(void); private: T m_array; };
-
template<class T> class Bubble_Sort { public: Bubble_Sort(T array); ~Bubble_Sort(void); private: T m_array; };das template<> gehört immer unmittelbar vor die klassendeklaration. außerdem muß in template<> vor dem parameter class und nicht typename stehen.
man kann das template<> aber auch vor eine elementfunktion der klasse setzten. sowas nennt sich dann member-template und ist noch ein bißchen komplizierter als normale templates

anstelle von class kann man vor einen template-parameter auch int oder einen beliebigen anderen einfachen datentyp stellen. der template-parameter ist dann kein datentyp sondern eine konstante. ZB:
template<class T, int SIZE=16> class Bubble_Sort { public: Bubble_Sort(T array); ~Bubble_Sort(void); private: T m_array[SIZE]; }; Bubble_Sort<int> a; // SIZE ist hier gleich 16 Bubble_Sort<int,32> b;
-
Konfusius schrieb:
[...] außerdem muß in template<> vor dem parameter class und nicht typename stehen. [...]
Ne typename geht auch.
Gruß
-
Yo, class oder typename ist dem Compiler schnuppe. Wie Bjarne Stroustrup sagt: "Schreibfaule bevorzugen class anstatt typename."
