Variablen über mehrere Funktionen verfügbar machen ?
-
nun gut ich hab mir das jetzt mal durchgelesen, bin aber nicht wirklich schlauer daraus geworden. ihr wollt damit sagen lieber oop nutzen ...
aber angenohmen ich schreib dafür jetzt ne klasse, dann kennt funktion 1 zwar das objekt aber funktion 2 kennt es dann wiederum doch auchnicht:
beispiel
xxx function1(...) { Klasse Objekt; Objekt->setData(...); // Daten in Objekt speichern auf die später z.b. funktion2 zugreifen soll ... } xxx function2(...) { /* und nun ? erzeug ich ein neues Objekt ist es leer. Auf das alte Objekt kann ich allerdings nur zugreifen wenn ich es public mache, aber wie komme ich jetzt an die in setData() gespeicherten Werte wieder dran ????? */ }
}
ich hoffe du verstehst meine problematik!
danke
-
ich meine damit z.b. wenn ich eine variable x habe und diese nicht global ist kenne ich sie eben nur in der dazugehörigen funktion. wenn ich aber nun meine variablen in z.b. ein edit feld lege dann kann ich diese über edit1->text wieder auslesen. es ja aber nicht angehen das ich für jede variable auf die später zugreifen muss ein textfeld oder sonstiges anlegen muss, daher meine frage wie ich das eben richtig machen muss. wie gesagt sehe ich da mit klassen momentan keinen ausweg da das objekt ja auchnur der jeweiligen funktion bekannt ist, oder ?
-
Da dies ja offensichtlich Klassemethoden sind, kannst du doch einfach ein Attribut in der KLasse erstellen, die diesen Wert enthält?
-junix
-
ja du meinst damit
z.b.
classe xyz public: setX(int x); getX(int x); private: int ax; // und das wäre das Attribut
nun gut also angenohmen unter button1Click wird nun das objekt erzeugt:
xyz Objekt; Objekt->setx(13);
nungut also steht nun in dem attribut ax der wert 13.
ok, und jetzt wird button2 angeklickt der diesen wert also Objekt->ax braucht.
Da aber die Funktion2 das Objekt "Objekt" garnicht kennt kann es doch schließlich auchnicht darauf zugreifen und da bin ich wieder bei meinem alten problem! wie greife ich auf solche werte übere mehrere funktionen hinweg zu ????
-
und wo ist das Problem?
du muss dein
xyz Objekt;
in z.B. private Abschnitt deiner Form Klasse reinschreiben, damit ist es in allen Klassenmethoden sichtbar. das hat auch junix gemeint.
-
oh gott damn!
kann das sein ?also ich muss einfach in unit.h im privat bereich xyz Objekt machen und kann drauf zugreifen ?
werde das jetzt mal testen und wenn das wirklich geht bin ich euch was schuldig, da wäre ja der hammer !!!!
-
noch eins,
und wenn ich nun direkt aus der klasse auf ListBox1 zugreifen will
muss ich woll eine methode schreiben in der ein zeiger auf listbox1 in die klasse übergeben wird ?sprich:
class xyz { ... setText(TListBox *lstbx, AnsiString *text) { lstbx->items->add(text); } ...
-
du hast es erfasst
-
und lass mich raten wenn ich nun von einem anderen formular ebenfalls auf die selbe klasse zugreifen will schreibe ich die zuweisung klasse objekt; einfach in public und könnte dann von unit2 z.b. form1->objekt->setX(3) machen, gell ?
-
halt,
funtzt aber dochnicht ganzso wie gesagt,
hab also meine klasse.h includet und in unit1.h im privat bereich:
einfach klassenname objekt; geschrieben
und erhalte folgenden fehler:
[C++ Fehler] Unit1.h(23): E2303 Typname erwartet
-
wenn du #include "klasse.h" in die unit.h reinschreibst, muss gehen.
-
aha also in die unit.h includen und nicht in die unit.cpp!
werd ich mal probieren ...
-
ok, funtzt.
und ich muss die Headerdatei in die unit.h includen da ich dort das objekt erzeuge oder warum ???
-
wie wärs mit einwenig C/C++ Grundlagen?
-
func schrieb:
und lass mich raten wenn ich nun von einem anderen formular ebenfalls auf die selbe klasse zugreifen will schreibe ich die zuweisung klasse objekt; einfach in public und könnte dann von unit2 z.b. form1->objekt->setX(3) machen, gell ?
Nun lies dir nochmals den Post von "AndreasW" am 24 Nov 2003 um 11:31
-junix
-
hab ich,
ich bekomme sobald ich nun das ganze compilieren will immer folgenden fehler:[Linker Fehler] Unresolved external 'TForm1::setZahl(int)' referenced from E:\CPP3\PUBLIC FUNKTIONEN\MAIN.OBJ
so ist mein source:
Main.h
//--------------------------------------------------------------------------- #ifndef MainH #define MainH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "function1.h" //--------------------------------------------------------------------------- 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); int setZahl(int zahl); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
function1.h
int setZahl(int zahl);
function1.cpp
int setZahl(int zahl1) { static int back = 0; back = back + zahl1; return back; }
und das ist immer der fehler
[Linker Fehler] Unresolved external 'TForm1::setZahl(int)' referenced from E:\CPP3\PUBLIC FUNKTIONEN\MAIN.OBJ
-
"setZahl" müsste hald schon ne Klassenmethode und nicht einfach ne normale C-Style Funktion sein...
-junix
-
kann ich "einfache" funktionen nicht global zugänglich machen ???
muss ich dann wirklich in jede unit die funktion reinschreiben, das kann doch nicht sein, oder ?
-
klar ich könnte extrem fuschen um das zu erreichen was ich möchte indem ich einen button mache, diesen visible false setzen und unter im dann denn code anbringe. damit könnte ich dann auch von fremden units button click ansprechen, aber das kann es doch nicht sein. bin ein anfänger und fusche schon noch etwas aber ich will es eben langsam richtig lernen ....
ich möchte einfach eine funktion von anderen units aus ansprechen können, das ist eigentlich alles und das muss doch mit c++ einfach gehen, oder ???
-
Hi,
schreib doch einfach statt:func schrieb:
int setZahl(int zahl1) { static int back = 0; back = back + zahl1; return back; }
das hier:
[cpp]int **TForm1::**setZahl(int zahl1)
{
static int back = 0;
back = back + zahl1;return back;
}
[/cpp]MfG
Alexander Sulfrian