Vererbung und Templates
-
Hallo,
ich versuche mit QT eine Templateklasse an eine andere Templateklasse zu vererben. Aber ich bekomme immer die Fehlermeldung (dick markierte Zeile):
expected template-name before '<'
Basisklasse:
/* #ifndef _SORTINGALGORITHM_H_INCLUDED_ #define _SORTINGALGORITHM_H_INCLUDED_ #include "svn/control/disposercontrol.h" #include <iostream> using namespace std; template <class T> class SortingAlgorithm { //--------------------------------------------------------- public: // Konstruktoren SortingAlgorithm(int size = 0); ~SortingAlgorithm(); private: // Attribute int size; double tact; T sortingArray; SortingAlgorithm* disposer; }; #endif// Konstruktor template <class T> SortingAlgorithm<T>::SortingAlgorithm(int size) { }Unterklasse:
/* Name: selectionsort.h Autor: Kevin Klein Datum: 30.05.2012 Beschreibung: Vererbung von Klassen im Model */ #ifndef _SELECTIONSORT_H_INCLUDED_ #define _SELECTIONSORT_H_INCLUDED_ #include "svn/control/disposercontrol.h" #include "svn/model/sortingAlgorithm.h" #include <iostream> template <class T> [b]class Selectionsort : public SortingAlgorithm<T>[/b] { public: // Konstruktoren Selectionsort(int size) : SortingAlgorithm<T>(size) {} // Destruktor ~Selectionsort(); private: }; #endif /*_SELECTIONSORT_H_INCLUDED_ */#include "selectionsort.h" // Konstruktor template <class T> Selectionsort::Selectionsort(int size) : SortingAlgorithm<T>(size) { }Und erstellen tu ich das dann so:
Selectionsort<int> *sort = new Selectionsort<int>(size)Wo ist mein Fehler?
Vielen Dank im voraus für eure Hilfe!Karlsberg_86
-
Hi.
Ich glaub da fehlt ein <T> ...
template <class T> Selectionsort::Selectionsort(int size) : SortingAlgorithm<T>(size) { }Welches du bei der Basisklasse ganz richtig mit geschrieben hattest.
Code:
// Konstruktor
template <class T>
SortingAlgorithm**<T>**::SortingAlgorithm(int size)
{
}tommy
-
Nein, das ist es leider nicht. Sonst noch jemand mit ner Idee?
-
Schick doch mal die gesamte Fehlermeldung.
-
Ich sehe eben, das du den Ctor:
#include "selectionsort.h" // Konstruktor template <class T> Selectionsort::Selectionsort(int size) : SortingAlgorithm<T>(size) { }in einem externen Sourcefile implimentiert hast. Ich meine da müsste man wohl mit export arbeiten... ich glaube aber auch gelesen zu haben, das das nur mangelhaft oder teilweise gar nicht von vielen Compilern unterstützt wird. Ist das noch so?
Abschnitt (v)
http://www.mathematik.uni-bayreuth.de/~rbaier/lectures/c++/html/node63.htmlTommy
-
hab ich auch gelesen, aber waren relativ alte Meldungen.
Hier die gesamte Fehlermeldung:
In file included from ..\QT/svn/model/sortingAlgorithm.h:17, from ..\QT\svn\model\sortingAlgorithm.cpp:9: ..\QT/svn/model/selectionsort.h:17: error: expected template-name before '<' token ..\QT/svn/model/selectionsort.h:17: error: expected '{' before '<' token ..\QT/svn/model/selectionsort.h:17: error: expected unqualified-id before '<' token mingw32-make.exe[1]: *** [debug/sortingAlgorithm.o] Error 1Heißt das, dass alle h. Dateien zusammengefasst werden müssen, die von der Klasse erben?
-
zirkuläre includes
-
Nebenbei: Vom Design her ist es recht fragwürdig, wenn Sortieralgorithmen als Klassen implementiert werden. Warum keine Funktionen?
-
Heißt das, dass alle h. Dateien zusammengefasst werden müssen, die von der Klasse erben?
Ne, nur die Methoden der Klasse mit in ihren Header. So mach ich das -> ob das so optimal ist... ich würd mich da gern etwas besseren belehren lassen...
Nexus schrieb:
Nebenbei: Vom Design her ist es recht fragwürdig, wenn Sortieralgorithmen als Klassen implementiert werden. Warum keine Funktionen?
Wird das Strategiepattern nicht auch mit unter mit Klassen umgesezt? Ist doch nicht so sehr falsch oder?
http://magazin.c-plusplus.net/artikel/Einf�hrung in Design Patterns