einfaches Objekt modula instanziieren



  • Hallo zusammen,

    folgendes: Ich habe eine Klasse A mit A.h und A.cpp. Desweiteren eine Klasse B mit B.h und B.cpp. Jetzt includiere ich in B.h die A.h und lege mir einen Pointer auf A *myA an. In B.cpp möchte ich nun mein Objekt myA instanziieren: *myA = new A();
    Jetzt kommt die Fehlermeldung:
    [C++Fehler] B.cpp(12): Cannot convert 'A *' to 'int *'.

    Was ist daran falsch?

    lg,
    blitzgeist



  • Ganz wage Vermutung,

    Du musst statt

    *myA = new A();
    
    myA = new A();
    

    schreiben...

    Du legst myA doch als Zeiger an?

    A *myA
    

    Wenn Du jetzt *myA schreibst, dereferenzierst Du was an dieser Stelle keinen Sinn machen würde

    Gruß Paddy



  • blitzgeist schrieb:

    Jetzt includiere ich in B.h die A.h und lege mir einen Pointer auf A *myA an. In B.cpp möchte ich nun mein Objekt myA instanziieren: *myA = new A();

    Da ist zumindest schonmal ein * zuviel. Korrekt wäre:

    myA = new A();
    


  • Danke für eure schnellen Antworten. Wenn ich in B.cpp das * bei *myA = new A() weglasse, kommt zusätzlich die Fehlermedlung:
    [C++Fehler] B.cpp(12): Type name expected.

    Wie es geht ist, wenn ich in der B.h A *myA lösche und in B.cpp schreibe:
    A *myA = new A();

    Dann habe ich aber meine Eigenschaft für B in B.cpp deklariert und nicht in B.h, wo sie ja eigendlich hingehört.



  • Kannst Du mal die Dateien zeigen?

    Bitte mit cpp tags



  • Zeig doch mal etwas mehr Code. (btw, ich hoffe, der Ausdruck myA = new A(); steht im inneren einer Funktion (z.B. der Ctor von B))



  • @CStoll
    ehm ne; myA = new A(); steht nicht im inneren einer Funktion. Ich packe es mal wohin...



  • Die Glaskugel 😉

    Das ist einfach unwahrscheinlich.....



  • ...funktioniert 😃 . Ein Lob an das Forum 👍



  • blitzgeist schrieb:

    @CStoll
    ehm ne; myA = new A(); steht nicht im inneren einer Funktion. Ich packe es mal wohin...

    Volltreffer 😃

    Zur Erklärung: Frei in der Datei darfst du nur Deklarationen (und Definitionen) stehen haben. Anweisungen müssen im Inneren einer Funktion untergebracht werden. In deinem Fall ist A* myA=new A(); eine Definition der Variable myA (inklusive Initialisierung) und myA=new A(); eine Anweisung (genauer: eine Zuweisung zur bereits existierenden Variablen myA).


Log in to reply