typedef in Klasse wird nicht erkannt



  • Hi!

    Warum kennt er das typedef in dieser Klasse nicht?

    class Test {
    public:
        IntVector GetIntVector() {
            IntVector v;
            return v;
        }
    private:
        typedef std::vector<int> IntVector;
    };
    

    OK, wenn ich die private Section zuerst schreibe dann läßt sich der Code kompilieren, aber so nicht. Irgendwie scheint das am Rückgabewert des Types zu liegen. In der Methode kennt er nämlich 'IntVector'. Nur nicht als Rückgabewert. Warum ist das so? 😕



  • Die Deklaration der Methode kommt vor der Deklaration des Typedefs.

    Das ist so als wenn Du schreibst:

    i = 12;
    int i;



  • Tja, aber so funktioniert es aber!

    class Test {
    public:
        void GetIntVector() {
            IntVector v; // hier kennt er den Typ aber
        }
    private:
        typedef std::vector<int> IntVector;
    };
    


  • Das liegt eventuell daran *mal rat* das die Implementierung innerhalb der Klasse nach der Deklarierung gemacht wird ?!? *genau weiß ich es nicht*

    Somit ist das typedef gelesen worden bevor die Implementierung der Methode beginnt.



  • Hallo,

    der typedef gehört zur Klasse.
    Bei einer Methodendefinition wird alles nach der Qualifikation mit dem Klassennamen (KlassenName::) aus Sicht des Klassenscopes betrachtet.
    Ein typedef innerhalb der Klasse gilt bei Methoden demzufolge nur innerhalb der Parameterliste und innerhalb des Bodys. Nicht aber für den Rückgabewert.
    Damit lässt sich folgendes gemeines Beispiel basteln:

    typedef int IntVector;
    class Test {
    public:
        // globales IntVector
        IntVector GetIntVector(std::vector<int> v);
    
    private:
        typedef std::vector<int> IntVector;
    };
    
    // ::IntVector              Test::IntVector
    IntVector Test::GetIntVector(IntVector v)
    {
    int i = v;  // error
    return i;   // ok
    }
    

    Wird eine Methode innerhalb der Klassendefinition definiert, wird erst innerhalb des Bodys die Welt aus Sicht des Klassenscopes betrachtet. Nicht aber Parameter und Rückgabewert.

    [ Dieser Beitrag wurde am 27.03.2003 um 16:51 Uhr von HumeSikkins editiert. ]


Anmelden zum Antworten