AnfängerProblem: Klasse von einer in die andere Unit übergeben



  • Hallo,

    Ich habe folgendes Problem:
    Ich habe in Unit1 eine Klasse (Class Ply) definiert. In Unit2 wird mit Ply* Speichern1 = new Ply eine entsprechende Variable erzeugt und es sollen hier Daten in die in der Klasse Ply unter public deklarierten Variable gespeichert werden. Anschliessend soll ein Zeiger auf Speichern1 erzeugt werden damit ich die gespeicherten Daten dann auch in Unit1 benutzen kann. Leider funktioniert das überhaupt nicht. In Unit2 klappt zwar das erzeugen der Record-Struktur die von der Class Ply in Unit1 abgeleitet ist aber das erzeugen des Zeigers funktioniert nicht. Kann mir jemand sagen wie ich das am besten lösen kann?

    Danke & LG 🙂



  • Hä....ich glaub es ist am besten wenn du mal n bissle code schreibst. deine fragenstellung is nämlich nicht ganz einfach zu verstehen.
    Oder poste zumindest mal ne art Blockdiagramm von dem was du vor hast.

    MfG Simon



  • Also das Problem ist folgendes:
    In Unit1 wird folgende Klasse definiert:

    class Ply
    {
       private:
       public:
       Longint Length;
       Longint CueIn;
       Longint CueOut;
       Longint Blend;
       AnsiString Title;
       AnsiString Author;
       AnsiString Filename;
       TTimer* Timer;
       FSOUND_STREAM* Stream;
       int Player;
    };
    

    In Unit2 soll nun ein Objekt dieser Klasse erzeugt werden um darin Daten zu speichern und zwar so:

    Ply* Speichern1 = new Ply;
    

    Nachdem alle Daten gespeichert wurden, wird nun ein Zeiger benutzt der im Header von Unit1 definiert ist und zwar so:

    Ply* Play1;
    

    um das Objekt an Unit1 zu übergeben und das funktioniert nicht. Die Zuweisung in Unit2

    Play1 = Speichern1;
    

    löst zwar keinen Compiler-Fehler aus, sogar zur Laufzeit löst die Zuweisung keinen Fehler aus, aber nachher wenn ich in Unit1 die Daten auslesen will bekomme ich eine Acess Violation. Weiß jemand eine Lösung?



  • in der Unit1.h (hab die klasse n bissle verinfacht)

    class Ply
    {
       public: int count;
    };
    
    Ply * pPly;
    

    in der unit2.cpp:

    Ply* Speichern = new Ply();
    Speichern->count = 1;
    ShowMessage(Speichern->count);
    pPly = Speichern;
    ShowMessage(pPly->count);
    

    Meinst du das so ???? jedenfalls würds so gehen !



  • Also du willst in Unit2 eine Klasseninstanz anlegen die du in Unit1 definiert hast und dann wieder in Unit1 darauf zugrèifen?

    Hmm... erstell doch die Instanz schon dort wo du mit ihr arbeiten willst und übergib nur einen Zeiger auf die Instanz an deine Unit2.

    Oder leg die Instanz in Unit2 an und übergib einen Zeiger an die Funktion die bei dir in Unit1 irgendetwas mit deiner Klasseninstanz machen soll.

    Achja.. und das aufräumen des Speichers nicht vergessen. 😃



  • seddto schrieb:

    Play1 = Speichern1;
    

    löst zwar keinen Compiler-Fehler aus, sogar zur Laufzeit löst die Zuweisung keinen Fehler aus, aber nachher wenn ich in Unit1 die Daten auslesen will bekomme ich eine Acess Violation. Weiß jemand eine Lösung?

    Du löscht nicht zufällig das Objekt nach der Zuweisung?

    delete Speichern1
    

    Falls doch wäre das natürlich tötlich.


Anmelden zum Antworten