Zeiger kopieren?



  • Hi..
    Ich habe in einer Klasse einen Zeiger(Attribut) auf ein Objekt einer anderen Klasse.
    Ich würde diesen zeiger gerne mittels Methode in eine andere Klasse kopieren.

    Die Methode heißt
    void kopiere(Tklasse1 😉

    Wenn ich die Methode nun aufrufe und
    objekt[2].zeiger übergebe bekomme ich einen Fehler.. Wie muss der parameter aussehen?



  • Nochmal hoffentlich verständlicher -.-
    class TAuto {
    private:
    AnsiString Hersteller;
    AnsiString Farbe;
    AnsiString Kennzeichen;
    AnsiString Km;
    public:
    ...
    };

    class Tfrei {
    private:
    TAuto * Auto;
    public:
    ...
    };

    class Tvermietet {
    private:
    TAuto * Auto;
    AnsiString Kundenname;
    AnsiString Datum;
    public:
    ...
    };

    class Zentrale {
    private:
    Tvermietet vermietete[50];
    TAuto Autos[50];
    Tfrei freie[50];
    public:
    ...
    void vermieten(TAuto *);
    };

    So ist der ungefähre Aufbau meiner Klassen!

    die Methode vermieten soll die Adresse des Autos aus Tfrei in die Klasse Tvermietet kopieren.

    Wie muss der aufruf der Methode aussehen?
    vermietete[3].vermieten(freie[3].Auto); ??
    Wie kann ich die Adresse welche in dem Zeiger steht übergeben?

    Kann sein das der Aufbau meiner Klassen unlogisch ist..
    Wenn jemand eine bessere Idee hat, immer her damit..



  • Sry, ich werd mich nun registrieren und dann kann ich auf editieren 😞

    Kann jemand meinen ersten Beitrag löschen?

    Die Methode vermieten gehört in die Klasse Tvermietet und nicht in die Zentrale!



  • Hallo

    Es wäre natürlich erstmal notwendig zu erfahren was denn für konkrete Fehlermeldungen kommen, denn der gezeigte Codeausschnitt ist an und für sich korrekt. Vermutlich fehlen nur ein paar Forward Declarations und richtig gesetzte includes. Dazu müßtest du aber noch die Verteilung der Klassen auf die einzelnen Dateien posten.

    Ich würde eine solche Klassenstruktur verwenden :

    class TKunde; // Forward Declaration
    
    class TAuto {
    private:
    AnsiString Hersteller;
    AnsiString Farbe;
    AnsiString Kennzeichen;
    AnsiString Km;
    TKunde* Kunde;
    public:
    
    // Konstruktor, um Kunde auf 0 zu setzen
    // Damit wird signalisiert das das Auto keinen Kunden hat
    // und damit nicht vermietet ist
    TAuto() : Kunde(0)
    {
    }
    ...
    };
    
    class TKunde
    {
    TAuto * Auto;
    AnsiString Kundenname;
    AnsiString Datum; 
    ...
    }; 
    
    class Zentrale {
    private:
    TAuto Autos[50];
    TKunden Kunden[50];
    public:
    ...
    void vermieten(TAuto *);
    };
    

    Jede einzelne Autoinstanz kennt nun ihren Status (Kunde == 0 : frei, Kunde != 0 : vermietet)
    Desweiteren solltest du die statischen C-Arrays in Zentrale lieber durch dynamische Containerklassen ersetzen, in diesem Fall std::vector (siehe Magazinartikel hier im Forum zum Thema STL-Container)

    Und nicht zuletzt : sfds

    bis bald
    akari


Anmelden zum Antworten