Objekt an andere übergeben
-
Hallo zusammen,
ich erzeuge mir ein Objekt mit dem ich bestimmte Werte den Membervariablen des Objektes zuweise. Nun benötige ich genau dieses Objekt an einer anderen stelle im meinem Programm. Ich habe ja jetzt das Problem das ich nicht genau weiß, wie ich es in die Methoden der anderen Klasse reinbekomme.
Kann mir bitte einer helfen!
Gruß
-
Erstell Dir in der Unit, in der Du das Objekt erzeugst, eine Funktion, die die Adresse des Objekts zurückgibt. Dann kannst Du diese Adresse in den anderen Formularen holen.
-
Hallo
als Referenz-Parameter.
Mir scheint dir fehlen Grundlagen für C++, also solltest du lieber ein entsprechendes Tutorial durcharbeiten.bis bald
akari
-
nunja die methode der anderen klasse erwartet eben eine referenz der anderen klasse
class Class1 { public: void GetOtherClass(const OtherClass& Obj) { x = Obj.Getx(); } private: int x; };und um das Objekt zur verfügung zu stellen vielleicht so:
im Header der Form, wo die vim Anwender verwalteten Deklarationen liegen:Class1* myClass;und dann eben irgendwo in der CPP des Formulars:
myClass = new Class1;oder was genau meinst du?
-
Also folgendes,
ich habe eine Klasse definiert mit dem Namen "ProgrammEinstellungen"; Ich erstelle mit in einer anderen Unit (z.B. Hauptprogramm) ein Objekt dieser Klasse und führe einige Methoden der Klasse aus. Dabei werden die Attribute des Objektes mit den Werten gefüllt die ich gerne an anderer Stelle im Programmablauf haben möchte.
Meine Frage ist jetzt, wie ich dieses Objekt an die andere Stelle bekomme.
Wie sage ich dem Programm, dass er mir das Objekt besorgen soll, damit ich es an einer anderen Stelle benutzen kann.Welche includes muss ich vornehmen??
-
naja wie gesagt, siehe mein beispiel oben!
Erstelle in der headerdatei deiner unit einen pointer auf das objekt!
-
Das klappt leider noch nicht richtig, irgendein Fehler muss noch drin sein bei mir.
Hier ist mal mein Code an dem ich gerade rumprobiere (Ist nur ein kleines unnötiges Beispiel):
Unit1.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; Programm *programm; Konfig k; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } void Programm::setzeWerte() { name = "Stefan"; alter = 21; } AnsiString Programm::getname() { return(name); } int Programm::getalter() { return(alter); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { programm->setzeWerte(); } //---------------------------------------------------------------------------Unit1.h
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; class Programm { private: AnsiString name; int alter; public: void setzeWerte(); AnsiString getname(); int getalter(); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifUnd nun die Unit2.h:
#ifndef Unit2H #define Unit2H #include <vcl.h> class Konfig { private: AnsiString namen; public: void GetOtherClass(const Programm& Obj ) { namen = Obj->getname(); } };In der Unit1 wird der Variable "name" der Wert "Stefan" zugewiesen; Nun möchte ich diesen Wert der Variable in der Klasse Konfig aus der Unit2 zuweisen;
Dazu möchte ich, dass das Objekt übergeben wird und ich einfach den Wert über die get_Methode bekomme!
-
Du mußt doch nur oben in die Unit2.h reinschreiben
#include "Unit2.h"
Dann kennt die Unit2.h die Deklaration von Programm. Desweiteren solltest du programm zu eriner Membervariablen von Form 1 machen (public).
Irgendwo in der Unit2 kannst du dann sowas schreiben.Konfig config; config.GetOtherClass(Form1->programm);Wenn du keine Membervariable willst, mußt du programm in Unit1 extern (d.h. global) deklarieren. Dies ist aber keine gute Idee.