1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

stl container inheritance

  • calvin
  • 13. September 2006 um 10:02
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • calvin
    Punkte
    95
    Beiträge
    13
    • 13. September 2006 um 10:02
    • #1

    hi leute
    schreibe für mein praktikum eine serialisierungsmethode für c++. aus diesem grund sollte ich die stl-container (vector/map/set/list/etc.) erweitern.

    ich weiß, viele foren schreiben man sollte dies nicht tun - aber ehrlich gesagt, finde ich das nicht schlimm und die alternative wäre furchtbar umständlich.

    aber ich habe FOLGENDES PROBLEM: dieser Source (ich will std::map erweitern) compiliert nicht:

    Code
    namespace std
    {
        template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
                            typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
        class MapWrapper :
            public SerializationWrapper,
            public std::map<_Key, _Tp, _Compare, _Alloc>
        {
            public:
                MapWrapper() {};
                virtual ~MapWrapper() {};
    
    
                virtual void serialize()
                {
                    // zeile 35 (für compiler...):
                    std::map<_Key, _Tp>::iterator iter;
                };
        };
    }; // namespace std
    Alles anzeigen


    der fehler (vom aufruf:

    Code
    g++ MapWrapper.h -I../libSerialization.1/

    ... das Inklude nur für "SerializationWrapper") liefert

    Code
    MapWrapper.h: In member function »virtual void std::MapWrapper<_Key, _Tp, _Compare, _Alloc>::serialize()«:
    MapWrapper.h:35: Fehler: expected `;' before »iter«


    kann mir bitte jemand weiterhelfen??? ich bin echt nicht blöd was C/C++ angeht, aber ich bekomms so einfach nicht hin

    danke & lg
    clemens

    EDIT: ein non-template iterator wäre mir eigentlich auch egal... casten geht ja problemlos... aber das gibts ja nicht in c++, oder?

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 13. September 2006 um 10:30
    • #2

    Ich bin bei solchen Geschichten kein Experte, aber mein g++ meint zu deinem Code "warning: `std::map<_Key, _Tp, std::less<_Key>, std::allocator<std::pair<const _Key, _Tp> > >::iterator' is implicitly a typename" und daß das deprecated sei; wenn ich typename einfüge, dann ist er ruhig.

    Vielleicht hilft das bei dir auch? Ansonsten dürft ein Fehler woanders im Code sein. Das jedenfalls kompiliert bei mir wie gesagt:

    C
    #include <map>
    #include <utility>
    
    
    namespace std
    {
        template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
                    typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
        class MapWrapper :
            public std::map<_Key, _Tp, _Compare, _Alloc>
        {
            public:
                MapWrapper() {};
                virtual ~MapWrapper() {};
    
    
                virtual void serialize()
                {
                    // zeile 35 (für compiler...):
                    typename std::map<_Key, _Tp>::iterator iter;
                };
        };
    }; // namespace std
    Alles anzeigen

    Eine Sache noch: Kann mir nicht vorstellen, daß das hier das Problem ist, aber Identifier, die mit einem Underscore gefolgt von einem Großbuchstaben beginnen, sind immer für die Implementierung reserviert. D.h. jedesmal, wenn du etwas _Key oder _Tp nennst, kann es sein, daß du mit den Interna deiner Header rumpfuscht, das kann zu beliebigen unmöglich zu findenden Fehlern führen.
    (Und der Vollständigkeit halber: Ebenso reserviert sind Identifier, die irgendwo zwei Underscrores hintereinander enthalten, außerdem sind Identifier, die mit einem Underscore und nicht einem Großbuchstaben beginnen, oft, aber nicht immer, reserviert. Am besten auch vermeiden.)

  • calvin
    Punkte
    95
    Beiträge
    13
    • 13. September 2006 um 10:42
    • #3

    Hi
    danke! das war wirklich der compiler-fehler... wegen den _Key, etc... weiß ich...
    ich wollte die eigentlich auch überschreiben, da ich hoffte so den fehler wegzubekommen :) (einer der vielen misglückten versuche *gg*)

    jetzt kann ich endlich weitermachen :)

    danke & lg

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum