Zeiger-Datenelemente initialisieren



  • Mit meinem Programm habe ich folgendes Problem:
    Es gibt zwei Klassen, die eine enthält unter anderem Zeiger auf Datenelemente der anderen Klasse. Vereinfacht sieht das folgendermaßen aus:

    class A
    {
    protected:
    char* pszName;

    public:
    A(const char* pszName);
    };

    class B
    {
    protected:
    A* datenelement1;

    public:
    B(const char* pszName) : datenelement1(pszName)
    };

    Natürlich sind beide Klassen viel umfangreicher und die Konstruktoren machen noch mehr. Beim Versuch, das Programm zu kompilieren, wird nun folgende Fehlermeldung ausgegeben: "cannot convert 'const char*' to 'A*' in initialization".

    Ich habe bereits ein wenig experimentiert und herausgefunden, dass alles problemlos funktioniert, wenn das Datenelement nicht als Referenz, sondern als Wert deklariert wird. Leider benötige ich für mein Programm aber eine Referenz ...

    Habe ich nun irgendeinen Fehler bei der Zeiger-Deklaration und -Verwendung gemacht oder gibt es da womöglich ein größeres Problem?



  • Benutze std::string!

    datenelement1 ist ein Zeiger auf A (warum?), nicht auf const char*. Selbstverständlich wird da kein Konstruktor von A aufgerufen.



  • Gast1000 schrieb:

    Natürlich sind beide Klassen viel umfangreicher und die Konstruktoren machen noch mehr. Beim Versuch, das Programm zu kompilieren, wird nun folgende Fehlermeldung ausgegeben: "cannot convert 'const char*' to 'A*' in initialization".

    Logisch, denn du versuchst ja im Prinzip sowas wie datenelement1 = pszName; , wobei das links ein Pointer auf A und recht ein Ponter auf ein Zeichen ist (aka ein C-String). Wie soll das gehen?

    Ich habe bereits ein wenig experimentiert und herausgefunden, dass alles problemlos funktioniert, wenn das Datenelement nicht als Referenz, sondern als Wert deklariert wird. Leider benötige ich für mein Programm aber eine Referenz ...

    Du hast hier keine Referenzen, sondern Pointer. Die Frage ist, was du eigentlich erreichen willst. Warum geht "A datenelement1" nicht? Wozu der Pointer? Also nicht technisch, sondern fachlich. Was soll der speichern? Und wem soll das Objekt gehören, auf das datenelement1 dann zeigt? Beantworte diese Fragen und wahrscheinlich ist die Lösung dann klar.


Log in to reply