Verwendung einer Klasse auf mehreren Formularen
-
Hi Leute,
SPAM (muss aber sein): SCHEISSE..., ITALIEN IST WEITER!

Nun zu meinem Problem. Ich habe ein Programm geschrieben, indem ich mehrere Formulare habe. Dazu kommt eine Klasse, in die einige Daten eingetragen werden. Und da ist auch schon das Problem. Wie kann ich es machen, das die Daten immer in die EINE Klasse geschrieben werden. Irgendwie erstellt der bei mir immer eine neue Instanz der Klasse. Wäre nett, wenn ihr mir helfen könntet. Ich hoffe ihr könnt nachvollziehen was ich aussagen möchte. Ich danke schonmal...
MfG Apo
-
Hallo
du must eben sicherstellen das du die eine Instanz zu jedem Form bekannt machst. Dabei könntest du verschiedene Wege gehen
- Erstelle eine Instanz im Hauptform, und übergib die Instanz als Pointer oder als Referenz an die andern.
- Lagere die Klasse in eine extra Unit aus, und erstelle dort eine globale Instanz, die du nach außen hin mit extern deklarierst.
- belies dich nach dem Singleton- Pattern im C++ Subforumbis bald
akari
-
So..., ich habe mich nun mal etwas mit den Singletons auseinandergesetzt, so wie du es mir vorgeschlagen hast. Hier erstmal meine Singleton-Klasse:
#ifndef TSINGLETON #define TSINGLETON template <class T> class TSingleton { protected: // Membervariablen static T *m_pSingleton; // statisches Objekt public: // Destruktor virtual ~TSingleton(void) { } // Get // Wenn nötig, statisches Objekt erzeugen und // Zeiger darauf zurückgeben inline static T* Get(void) { // Existiert schon eine Instanz if(!m_pSingleton) m_pSingleton = new T; // Nein, dann neue Instanz erzeugen // Zeiger auf die Instanz zurückgegeben return m_pSingleton; } static void Del(void) { // gab es eine Instanz? if(m_pSingleton) { delete m_pSingleton; // Ja, dann freigeben m_pSingleton = NULL; // und Zeiger auf NULL setzen } } }; // Die statische Variable erzeugen template <class T> T* TSingleton<T>::m_pSingleton = NULL; #endifMeine CPlayer-Klasse erbt die Attribute der Singleton-Klasse:
class CPlayer : public TSingleton<CPlayer>Wenn ich einen Wert in meine Klasse schreiben möchte, dann mache ich das wie folgt:
CPlayer::Get()->setName(txtName->Text);Und wenn ich den Wert ausgeben möchte, dann muss ich das so machen:
lblName->Caption = CPlayer::Get()->getName();Ich erhalte erstmal keine Fehlermeldungen um die Ohren geschmießen, worüber ich schonmal sehr froh bin aber es gibt noch ein kleines Problem hinter das ich noch nicht gestiegen bin. Wenn ich die Daten auf dem selben Formular ausgebe, auf dem ich diese auch eingegeben habe, funktioniert alles wunderbar. Wenn ich diese aber auf einem anderem Formular ausgeben möchte bekomme ich auch keine Fehlermeldung, aber die Daten werden nicht angezeigt und da liegt mein Problem.
Könntet ihr mir sagen, wie ich dieses Problem noch umgehen kann? Wäre nett. Danke schonmal...
MfG Apo