1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

stl container inheritance

  • calvin
  • 13. September 2006 um 10:02
  • Unerledigt
  • calvin
    3
    calvin
    Mitglied
    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?

    Arithmetik heißt, bis zwanzig zählen zu können,
    ohne die Schuhe auszuziehen.
    Mickey Mouse.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    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.)

    *plantsch*

  • calvin
    3
    calvin
    Mitglied
    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

    Arithmetik heißt, bis zwanzig zählen zu können,
    ohne die Schuhe auszuziehen.
    Mickey Mouse.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung