Zeiger neu Zuweisen



  • Moin allerseits,

    die Kurzfassung meines Problems "Zeiger neu zuweisen":

    //Das hier funktioniert:
    
        int Zahl1 = 1; 
        int Zahl2 = 2;
        int *Zeiger = &Zahl1;
        //eine Ausgabe zur Überprüfung liefert brav: *Zeiger = 1
    
        Zeiger = &Zahl2; //Der Zeiger soll nun auf das andere Objekt verweisen
        //eine Ausgabe zur Überprüfung liefert brav: *Zeiger = 2
    
      //Was aber nicht funktioniert, ist dasselbe Prinzip mit einem Klassen-Objekt:
    
        TestKlasse Objekt1();
        TestKlasse Objekt2();
        TestKlasse *Zeiger = &Objekt1;
        //soweit so gut, eine Überprüfung über diverse Elemente oder Funktionen, die per Zeiger->... abgerufen werden, wird bestanden
    
        Zeiger = &Objekt2;
        //Hier meckert der Compiler dann rum: 'Zeiger' does not name a type
    

    Meine Frage lautet also: Kann ich einem Zeiger auf Klassen-Objekte ein neues Ziel zuweisen? Und wenn ja, wie funktioniert das?

    Die Grundidee ist, dass ich den Zeiger als universellen Ansprechpartner nutzen möchte, der mir Informationen über ein "aktives" Objekt der Klasse liefert - wobei sich aber immer erst während der Laufzeit entscheidet, welches Objekt gerade aktiv ist. Wenn ein Objekt aktiv wird, soll der Zeiger nun also auf dieses Objekt statt auf das alte zeigen. Somit könnte ich im Quellcode recht simpel stets den Zeiger verwenden.

    Ich kann mir eine äquivalente Lösung mit globalen Variablen als Zwischenspeicher basteln oder mit static Variablen in der Klasse arbeiten, die sich bei Objektwechsel ändern sollen. Aber einen Zeiger fände ich a) schöner und b) übersichtlicher.

    Ich hoffe, mein Problem wird klar und ist lösbar 🙂 viele Dank schonmal für Eure Mühen


  • Mod

    An Klassenobjekten ist nichts anders als an int. Dein Code müsste so funktionieren, wie gezeigt. Das heißt, dein Fehler liegt irgendwo anders im Programm, oder dein Programm ist anders als der hier gezeigte Code. Vielleicht auf sehr subtile Art und Weise - bei C++ zählt jedes einzelne Zeichen.

    Wie man Probleme nachstellbar und nachvollziehbar macht



  • Ich würde andere Fehler erwarten.
    Das

    TestKlasse Objekt1();
    

    sollte als Funktion Objekt1, die TestKlasse zurückgibt, interpretiert werden.
    Benutze

    TestKlasse Objekt1;
    // oder
    TestKlasse Objekt1{};
    


  • Vielen lieben Dank für die schnelle Antwort!

    Da es angeblich so funkionieren soll, habe ich den heruntergebrochenen Code kurz in einem Test-Projekt erstellt und gemerkt, dass es wirklich funktioniert...

    Mein Fehler lag am Ende darin, dass ich im Original den hierzu äquivalenten Code-Block

    TestKlasse Objekt1();
    TestKlasse Objekt2();
    TestKlasse *Zeiger = &Objekt1;
    Zeiger = &Objekt2;
    

    außerhalb einer Funktion stehen hatte. Das klappt bei der 4. Zeile natürlich nicht...

    Aber gut, dass ich jetzt hier gefragt habe, und danke wirklich für die Antwort. Dadurch habe ich nämlich meine Fehlersuche verlagert. Vorher habe ich stundenlang engstirnig das Problem an falscher Stelle gesucht 😉

    Beste Grüße



  • Und ja, manni66, leider funktioniert der Code auch nur ohne die Klammern hinter Objekt1 und Objekt2, das war aber "nur" ein Fehler im Forum-Post 🙄


Anmelden zum Antworten