Feld mit Zeigern auf Klasse



  • Hi, komme nicht so recht weiter.

    Ich soll eine Klasse Unicard schreiben, die ein paar Attribute enthält, dazu dann eine Funktion "Info", die die ausgabe bereitstellt. Das klappt auch ganz gut. Aber nun kommt folgende Aufgabe:

    "Schreiben Sie ein Hauptprogramm, das ein Feld namens TU von drei Zeigern auf die
    Klasse Unicard anlegt. Erzeugen Sie je eine dynamische Instanz der Klasse Unicard
    und weisen Sie deren Adressen den Zeigern im Feld TU zu. Belegen Sie die Attribute
    mit Werten Ihrer Wahl. Anschlieend laufen Sie mit einer for-Schleife uber das Feld
    und nutzen die Methode Info zur Ausgabe. Was wird ausgegeben?"

    also es geht um die main(), da komme ich halt nicht weiter.

    So weit bin ich:

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Unicard
    {
    private:
    	string Name;
    	string Nachname;
    	unsigned int TUDOID;
    	unsigned int Semester;
    public:
    Unicard(string Name, string Nachname, unsigned int TUDOID, unsigned int Semester)
    : Name(Name)
    , Nachname(Nachname)
    , TUDOID(TUDOID)
    , Semester(Semester)
    
    {}
    
    virtual void Info() const
    {
    	cout<<"Name: "<<Name<<endl;
    	cout<<"Nachname: "<<Nachname<<endl;
    	cout<<"TUDOID: "<<TUDOID<<endl;
    	cout<<"Semester: "<<Semester<<endl;
    
    }
    
    };
    
    int main()
    {
    
    Unicard *TU[3];
    
    Unicard *p1 = new Unicard("Hans","Wurst",1234,6);
    p1=&TU[0];
    Unicard *p2= new Unicard("Daniel","Becker",34567,3);
    p2=&TU[1];
    Unicard *p3 = new Unicard("Dennis","Wiese",45678,2);
    p3=&TU[2];
    
    for (i=0, i<=2; i++)
    { 
    	TU[i]->Info();
    
    }
    
    }
    


  • wobei genau kommst du denn nicht weiter?



  • ja es klappt nicht so wie es soll. scheinbar ist es ja falsch wie ich das Feld mit den Zeigern programmiere.



  • so weit bin ich jetzt selbst gekommen:

    int main()
    {
    
    Unicard **TU[2];
    
    Unicard *p1 = new Unicard("Hans","Wurst",1234,6);
    TU[0]=&p1;
    
    Unicard *p2= new Unicard("Daniel","Becker",34567,3);
    TU[1]=&p2;
    
    Unicard *p3 = new Unicard("Dennis","Wiese",45678,2);
    TU[2]=&p3;
    
    for (int i=0; i<=2; i++)
    { 
    TU[i]->Info();
    
    }
    system("pause");
    return 0;
    }
    

    der einzige Fehler ist wohl in der Vorschleife "Error 1 error C2227: left of '->Info' must point to class/struct/union/generic type "

    jemand ne idee???



  • Ein Array von drei Zeigern auf ein Unicard definiert man so:

    Unicard* TU[3];
    


  • jo danke, aber was ist nun die letzte Fehlermeldung?



  • Du speicherst in deinem Array Zeiger auf Zeiger auf Unicard. Das ist doch bestimmt nicht deine Absicht.
    Eher so

    Unicard* TU[3]; // Array auf Zeiger auf Unicard mit 3 Elementen.
    
    TU[0] = new Unicard("Hans","Wurst",1234,6); // dynamische Erzeugung und Zuweisung
    // Löschen zum Schluss nicht vergessen
    ...
    


  • Ay der Daus!!! Tausend Dank, ich war am rotieren!

    Was mich halt in der Aufgabenstellung so irritiert hat, war dass den zeigern noch die adressen zugewiesen werden sollten, aber das geschieht ja scheinbar automatisch



  • Die Formulierung ist zwar etwas verwirrend, aber korrekt. Es heißt

    Erzeugen Sie je eine dynamische Instanz der Klasse Unicard und weisen Sie deren Adressen den Zeigern im Feld TU zu.

    Du sollst hier also die Adressen der Instanzen speichern, und nicht, wie anfänglich von dir interpretiert, die Adressen von Zeigern auf die Instanzen.
    new gibt einen Zeiger auf die Instanz zurück, also die Adresse der Instanz. 😉



  • Ok, also es klappt nun alles 🙂

    Vielen herzlichen Dank fürs Noob-Supporten! 🙂


Anmelden zum Antworten