Objekt aus Klassen-Template heraus liefern lassen



  • Guten Abend zusammen,
    folgender Code erzeugt einen Compilerfehler, den ich leider nicht verstehe:

    template<class T>
    class A
    {
        class B
        {
    
        };
    
     public:
        B getB();
        int getInt();
    };
    
    template <class T> B A<T>::getB()
    {
    }
    
    template <class T> int A<T>::getInt()
    {
    }
    

    Mein Problem ist, warum der Compiler bei der Funktion getB() nun meckert, getInt funktioniert ja schließlich auch. Wie komme ich also an das B-Objekt ran. Die Struktur soll so erhalten bleiben, sprich, ich möchte die Implementierung nicht in die Klassendeklaration mit reinnehmen.



  • vielleicht

    template <class T> A<T>::B A<T>::getB()
    


  • Danke für Deine Mühe aber das ist es leider nicht.

    Die Meldung, die mir der gcc dabei ausspuckt lautet:
    *expected constructor, destructor, or type conversion before »A«
    *



  • template <class T> typename A<T>::B A<T>::getB()
    


  • Besten Dank, das funktioniert.

    Zur Begründung:
    Heißt das, ich muss das Schlüsselwort typename genau deswegen verwenden, um den Typen, den das Template irgendwann mal haben soll, genau anzusprechen?



  • Wenn du auf ein Element einer Template-Klasse zugreifst nimmt der Compiler immer ein Objekt an, wenn es sich dabei aber um nen Typ handelt, dann musst du ihm das explizit mit typename sagen.


Anmelden zum Antworten