frage zu doppelt verketteten listen-templates und iteratoren



  • Hi!
    hab ne frage zu doppelt verketteten listen und iteratoren. ich hab mir ein doppelt verkettes listen template nebst eingebautem iterator mal selber programmiert, um iteratoren besser zu verstehen. (scheint auch endlich alles zu gehen..)

    dann hab ich versucht eine sortiert verkettete liste (template) auf basis der d-liste zu bauen. in diese soll jedes neue element sortiert eingefügt werden.
    dat geht irgendwie nich!
    ich krieg immer ne fehlermeldung:

    #ifndef _sortedlist__
    #define _sortedlist__
    
    #include "DList.h"
    //template<class Typ> class DList;
    
    template <class Typ>
    class SortedList
    {
    private:
       DList<Typ> _list;	
    
    public:
       SortedList()  {}
       ~SortedList() {}
    
       void insert(const Typ& data)
       {
          if(_list.isEmpty()) _list.push_back(data);
          else
          {
             DList<Typ>::iterator _i(_list.begin());  //<--hier kommt fehler!! error: expected ; before _i ...
             for(_i = _list.begin(); _i != _list.end(); ++_i)
             {
                std::cout<<"loop"<<std::endl;
    	    if( data < *_i )
                   break;
             }
          	_list.insert(_i, data);
          }
       }
    
       void remove(const Typ& data);
       Typ& get(Typ& data);
    };
    

    versteh ich eigentlich nicht. wenn ichs ohne template klassen mache dann gehts.
    weiss jemand warum?



  • typename DList<Typ>::iterator _i(_list.begin());
    

    Für 'ne Begründung einfach mal nach "dependant name" suchen.

    Und du solltest deine Include-Guards umbenennen, "__" ist reserviert.



  • funktioniert! wow!
    suchen nach dependant names hat bis jetzt ausser kryptischen müll nix erklärt.
    typename hab ich bis jetzt wirklich noch nie wahrgenommen.
    in meinen büchern hab ich dazu auch nix gefunden...

    also was typename nun wieder sein soll, ts,ts... 😕

    kommt mir doch n bisschen so vor wie das zitat was man hier hin und wieder findet:

    "its not a bug, its a feature!" ...

    ps: bezüglich der guards: es ist nur ein unterstrich am anfang der guards.
    sind die auch reserviert?
    nö, oder?



  • Du musst typename verwenden, da dein Typname von einem Template-Parameter abhängt. typename gibt man vor qualifizierten Namen an um festzulegen das der gesamte Name ein Typ ist.


Anmelden zum Antworten