Objekt einer Klasse mit this initalisieren + Ich glaub ich bin bekloppt



  • Also das ganze sieht so aus:

    template<class T>
    class foobar
    {
    public:
        foobar(T* t)                            //Fehler
        {
            //...
        };
    };
    
    template<class foo,class bar>
    class X
    {
    private:
        foobar<X<foo,bar> >y;
    public:
        X()
            :y(this) {};                        //Warnung
    };
    

    Fehler/Warnungen:

    warning C4355: this': wird in Initialisierungslisten für Basisklasse verwendet
    Bei der Kompilierung der Memberfunktion 'abstract_coding_tree<>::abstract_coding_tree(void)' der Klassenvorlage
    error C2065: 't': nichtdeklarierter Bezeichner
    

    Meine Fragen dazu: Ist die Warnung bedenklich? Und woher könnte bitte der Fehler sein???



  • template<class T> 
    class foobar 
    { 
    public: 
        foobar(T* t)                            
        { 
            //... 
        }; 
    }; 
    
    template<class foo,class bar> 
    class X 
    { 
    private: 
        foobar<X<foo,bar> >y; 
    public: 
        X() 
            :y(this) {};                        
    };
    int main()
    {
    	X<int,double> x;
    }
    

    Kompiliert bei mir unter gcc 3.3.4 ohne Warnung!



  • ness schrieb:

    Meine Fragen dazu: Ist die Warnung bedenklich?

    Kommt darauf an, was du mit dem Zeiger machst. Du musst dir darüber im Klaren sein, dass this zu diesem Zeitpunkt noch nicht auf ein vollständig initialisiertes Objekt zeigt, d.h. du solltest nicht auf Member zugreifen. Es ist in Ordnung, wenn du dir diesen Zeiger nur für die spätere Verwendung merkst.

    Und woher könnte bitte der Fehler sein???

    Jedenfalls nicht in dem Code, den du hier gezeigt hast.


Anmelden zum Antworten