segmentation fault - Brett vor den Augen



  • Hallo Leute

    Ich kriegs gerade einfach nicht gebacken. Wo liegt das Problem?

    template<class KEY>
    class MapMaps
    {
       public:
       MapMaps& operator[]( KEY _key )
       {
          return Map[ _key ];
       }
    
       private:
       std::map< KEY,MapMaps<KEY> > Map;
    
    };
    


  • map.contains(key); ?



  • Wie gesagt, Brett vor den Augen. Obiges Codebeispiel funktioniert natürlich.

    Die MapMaps Klasse hält noch eine weitere Membervariable einer etwas aufwändigeren Klasse.
    Wenn ich jetzt n'segmentation fault erhalte, schon beim Aufruf von:

    MapMaps<std::string> MyMapMap;
    MyMapMap["test"];
    

    An was kann das liegen? Fehler im Copy Constructor dieser Memberklasse oder etwas derartiges? Fehler im Defaultkonstruktor? Der verdammte Fehler will mir nicht ins Auge fallen...



  • copyconstructor...

    Merci trotzdem, hat nur schon geholfen, mal zu notieren was überhaupt so möglich ist... 😉



  • mightymighty schrieb:

    Wo liegt das Problem?

    Du versuchst etwas, was nicht erlaubt ist. Zu dem Zeitpunkt, wo Du Map definierst, ist MapMaps<KEY> ein unvollständiger Typ. Du verletzt damit die Anforderungen des Klassentemplates MapMaps<KEY>.



  • krümelkacker schrieb:

    Du versuchst etwas, was nicht erlaubt ist. Zu dem Zeitpunkt, wo Du Map definierst, ist MapMaps<KEY> ein unvollständiger Typ. Du verletzt damit die Anforderungen des Klassentemplates MapMaps<KEY>.

    Nene, das geht problemlos! (Weil der Typ da überhaupt nicht vollständig sein muss)



  • mightymighty schrieb:

    krümelkacker schrieb:

    Du versuchst etwas, was nicht erlaubt ist. Zu dem Zeitpunkt, wo Du Map definierst, ist MapMaps<KEY> ein unvollständiger Typ. Du verletzt damit die Anforderungen des Klassentemplates MapMaps<KEY>.

    Nene, das geht problemlos! (Weil der Typ da überhaupt nicht vollständig sein muss)

    Upps, ich meinte natürlich das Klassentemplate std::map. Sonst habe ich dem nichts mehr hinzuzufügen. Tu, was Du nicht lassen kannst.


Anmelden zum Antworten