stl container inheritance

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


    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.

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

    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*

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

Jetzt mitmachen!

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