Klassenkonstruktion mit new



  • Hi,

    ich habe ein kleines (für mich seltsam erscheinendes) Problem:
    ich definiere eine Klasse

    class Component1{...};

    die natürlich auch in meiner .cpp datei includiert wird.
    möchste ich nun in einer Methode einer lokalen Variable eine neue instanz dieser Klasse zuweisen

    _Component1 = new Component1();
    

    gibt es eine Fehlermeldung.

    conversion from `Package1::Component1*' to non-scalar type `Package1::Component1' requested

    lasse ich das new weg geht alles gut...
    syntaktisch ist das new aber doch nicht falsch, oder?



  • Hallo,

    wenn ich dich richtig verstanden haben dann so

    Component1 *_Component1 = new Component1();
    


  • Wie hast du denn die Variable "_Component1" definiert?

    Für deine new-Konstruktion korrekt wäre:

    Component1* _Component1;//Pointer auf Objekt - wird mit einer Adresse initialisiert
    

    Die Fehlermeldung deutet auf so etwas hin:

    Component1 _Component1;//Objekt - wird per Konstruktoraufruf direkt gefüllt
    

    (PS: Denk mal über deine Namenswahl nach - Variablen mit _ sind für den Compiler reserviert)



  • Hi!

    Eher so:

    Component1 *_Component1 = new Component1();
    

    grüße



  • Hallo,

    du brauchst nen Zeiger:

    Package1::Component1 *p = new Package1::Component1();  //Allokieren
    delete p;  //Freigeben
    

    siehe auch: http://tutorial.schornboeck.net/dyn_speicher.htm

    MfG

    GPC



  • nicht ganz.

    ich deklariere die Variable mit

    Component1 _Component1;
    

    und weise dieser Variable dann später in einer init-Methode eine Instanz zu

    _Component1 = new Component1();
    

    und das schlägt fehl.



  • ja, weil sie kein ZEIGER ist! Deklariere sie als Zeiger und alles ist wunderbar (vorausgesetzt du änderst den Namen und gibst den Speicher wieder frei).

    MfG

    GPC



  • Hi!

    Weils falsch ist. Was du brauchst ist ein Zeiger:

    Component1 _Component1;
    

    grüße



  • kollektives "nimm Zeiger!" posten 🙂

    natürlich klappt jetzt alles, dank euch.



  • @David_pb:
    Dann schreib auch nen Zeiger 😉

    @eem:
    Component1 _Component1;
    Hier ist _Component1 bereits eine konstruierte Instanz, Du brauchst ihr nichts mehr zuweisen.



  • David_pb schrieb:

    Weils falsch ist. Was du brauchst ist ein Zeiger:

    Component1 _Component1;
    

    😃
    wohl eher

    Component1 *component1;
    

    MfG

    GPC



  • [quote="LordJaxom@eem:
    Component1 _Component1;
    Hier ist _Component1 bereits eine konstruierte Instanz, Du brauchst ihr nichts mehr zuweisen.[/quote]

    ah, okay. jetzt ists mir klar.



  • GPC schrieb:

    David_pb schrieb:

    Weils falsch ist. Was du brauchst ist ein Zeiger:

    Component1 _Component1;
    

    😃
    wohl eher

    Component1 *component1;
    

    MfG

    GPC

    Nein, warum auch? Ich habe mich an seinen Bezeichner gehalten, von daher...

    grüße



  • äh, doch. Du hast dich zwar an seinen (nicht guten) Bezeichner gehalten, aber _keinen_ Pointer deklariert. Durch deinen Code wird das Problem schließlich fabriziert, da der Compiler eine dynamisch allokierte Instanz der Klasse Component1 an einen Pointer zuweisen will, aber auf ein bereits konstruiertes Objekt trifft. Das ist das Problem.

    MfG

    GPC



  • GPC schrieb:

    äh, doch. Du hast dich zwar an seinen (nicht guten) Bezeichner gehalten, aber _keinen_ Pointer deklariert. Durch deinen Code wird das Problem schließlich fabriziert, da der Compiler eine dynamisch allokierte Instanz der Klasse Component1 an einen Pointer zuweisen will, aber auf ein bereits konstruiertes Objekt trifft. Das ist das Problem.

    MfG

    GPC

    Tatsächlich, stimmt. Das hab' ich natürlich völlig übersehen! 🙂 Aber ich möchte ganz deutlich sagen das der Fehler nicht durch meinen Code entsteht... Ich hab nur vor lauter Eile einen Tippfehler gemacht der genau den Fehler im Quellcode des Posters wiederspiegelt... Und wie es zu diesem Fehler kommt weis ich selbst.

    grüße



  • Ich hab nur vor lauter Eile einen Tippfehler gemacht der genau den Fehler im Quellcode des Posters wiederspiegelt... Und wie es zu diesem Fehler kommt weis ich selbst.

    schon klar, war kein Vorwurf, nur eine Feststellung.

    MfG

    GPC


Log in to reply