Fehler beim Aufruf einer Methode



  • Hallo!

    Ich habe mal ne Frage und zwar erstelle ich mir eine Klasse mit folgendem Header

    ...
    #include "Textur.h" //Header von Textur Klasse
    #include "Wuerfel.h" //Header von Wuerfel Klasse
    using namespace std;
    
    class Textur;
    class Wuerfel;
    
    class GLUTFenster
    {
    private:
    ...
    	Textur *eineTextur;
    	...
    public:
    	...
    	Wuerfel *einWuerfel;
    	...
    
    };
    

    in der .cpp dann sage ich im Konstruktor

    eineTextur = new Textur(); sowie einWuerfel= new Wuerfel();

    Es kann sein, dass einige das nicht so gut finden, aber da ich von JAVA herkomme bin ich es so gewohnt! 🙂

    So nun kommt meine erste Frage:
    Wenn ich nun z.B.: einWuerfel->zeichnewuerfel(); aufrufe gibt mir der Compiler folgenden Fehler aus.

    "error C2228: Der linke Teil von '->zeichnewuerfel' muss eine Klasse/Struktur/Union sein"

    Wenn ich das ganze global anlege gibt es keine Probleme, nur finde ich globale objekte eher bescheiden! Also einfach Wuerfel *test = new Wuerfel(); irgendwo in den Code schreiben und die Sache läuft, kann dann auch die ganzen Methoden auswählen, sobald aber das ganze innerhalb der Klasse steht zeigt er mir diese nicht mehr an!

    Als Entwicklungsumgebung benutze ich Microsoft Visual C++, ist zwar in die Jahre gekommen, finde ich für C++ besser, als .NET 2005

    Gruß

    Marcel 🙂



  • Hallo,
    poste doch bitte mal den (minimalen) Code, der den Fehler verursacht.



  • der 'new'-operator gibt einen Zeiger zurueck , d.h. die linke Seite muss heissen: 'eineTextur* = new Textur();' ( die Fehlermeldung bedeutet uebrigens genau das , naemlich dass der linke Teil auf eine Klasse/Struktur/Union ZEIGEN muss )



  • oups, sorry , du daklarierst ja als pointer 🙄



  • Jo, und die Syntax eineVariable* = <adresse> gibt es in C/C++ sowieso nicht, das wird aufgelöst zu eineVariable *= <adresse> (Multiplikation)



  • .... aber include die header mal in der .cpp



  • Dein Problem dürfte wohl sein, daß für den Ausdruck "einWuerfel->zeichneWuerfel();" die forward-Deklaration auf Wuerfel nicht ausreicht - da brauchst du die komplette Klassendefinition.



  • Hi Marcel,

    Wenn ich nun z.B.: einWuerfel->zeichnewuerfel(); aufrufe gibt mir der Compiler folgenden Fehler aus.

    "error C2228: Der linke Teil von '->zeichnewuerfel' muss eine Klasse/Struktur/Union sein"

    Geht's vielleicht mit dereferenzieren?

    *(einWuerfel).zeichnewuerfel();
    

Anmelden zum Antworten