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.html

    Tommy



  • 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 1
    

    Heißt das, dass alle h. Dateien zusammengefasst werden müssen, die von der Klasse erben?


  • Mod

    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


Anmelden zum Antworten