inner_class



  • Habe eine Klasse die wiederum eine andere Klasse enthält. Von dieser inner_class würde ich gerne wiederum in der äusseren Klasse eine Map anlegen.

    Hier mein Code. Aufs wesentliche gekürzt.

    class COuterClass
    {
     public:
       typedef std::map<CString, CSaveVar*> VarMap;
    
    private: 
       class CSaveVar
       {
        public:
          CString name;
       };
    };
    

    Bereits in diesem Stadium erhalte ich den Fehler: CSaveVar nicht deklarierter Bezeichner.

    Wenn ich den typedef unter die inner_class setze erhalte ich die Fehlermeldung:
    Ungültige Verwendung dieses Typs als Ausdruck.

    Was mache ich falsch



  • Ok vergesst diesen Satz:

    Wenn ich den typedef unter die inner_class setze erhalte ich die Fehlermeldung:
    Ungültige Verwendung dieses Typs als Ausdruck.

    Hatte noch einen kleinen Fehler drin.

    Wenn ich den typedef nun unter die inner_class stelle gehts andersrum nicht wieso?


  • Mod

    Weil die Klasse zuvor bekannt sein muss.

    Das geht auch (Vorwärtsdeklaration):

    class COuterClass
    {
    private: 
       class CSaveVar;
    public:
       typedef std::map<CString, CSaveVar*> VarMap;
    
    private: 
       class CSaveVar
       {
        public:
          CString name;
       };
    };
    


  • Ok. Dachte in einer Klasse spielt die Reihenfolge keine Rolle. Man kann ja auch Membervariablen in einer Funktion verwenden, obwohl die Membervariablen ganz unten deklariert sind. Bei Klassen ist das anscheinend anders. Danke.


Anmelden zum Antworten