globale Variablen
-
Globale Variablen sind nicht gut!
-
Sind sind nicht nur nicht gut sondern man sollte sie auch nicht verwenden.
[ Dieser Beitrag wurde am 12.06.2003 um 09:50 Uhr von Unix-Tom editiert. ]
-
Würde ich auch nur verwenden wenn es sich nicht vermeiden lässt. Fällt mir aber spontan kein Anwendungsfall dazu ein...

-
Hi,
also dass sie nicht gut sein kann ja schon sein...
Nur ich bräuchte halt von allen (oder zumindest mehr als einer) Klassen Zugriff auf 3-4 Variablen...Das mit dem define habe ich auch schon versucht:
#ifndef variablen #define variablen .... #endifklappt aber seltsamerweise dennoch nicht! Warum?
Das mit extern wäre natürlich schon eine Idee, aber gibt es vielleicht Möglichkeiten, von z.B. CMainFrm auf CProgrammView zuzugreifen?
Weil, wenn ich das bei Visual C++ richtig verstanden habe, initialisieren die keine Objekte von den einzelnen Klassen, sondern machen das hier:pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CProgrammDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CProgrammView)); AddDocTemplate(pDocTemplate);Gruss, Tobias
-
Warum deklariest du die Variablen nicht in deiner Klasse, und gibst allen Klassen zugriff auf diese Klasse.
Dazu musst du SetParent in den Klassen überschreiben
In etwa so:void CX::SetParent(CDialog *pWnd) { m_pWnd = pWnd; //m_pWnd ist ne private Variable (CDialog* m_pWnd) }und um die benötigte Variablen dann aufzurufen benötigst du nur
... iX = ((CBasisDlg*)m_pWnd)->m_iBeispiel; ...Vergess aber nicht
// X.cpp: Implementierungsdatei // #include "stdafx.h" #include "Basis.h" #include "X.h" #include "BasisDlg.h" //Die muss dazu gefügt werden in X.cpp #ifdef _DEBUG ...Ich hoffe du kannst dies als Lösung verwenden
-
Zu globalen Variablen wurde jetzt ja schon alles gesagt, ausser, wie man sie verwendet

Das von Jube war schon garnicht schlecht, nur war es nciht vollständig:
Wie Jube es gesagt hat, nur muss sie in EINER CPP-Datei normal, also ohne extern deklariert werden.
-
IMHO habe ich nichts zu Globalen Variablen gesagt da man sie nicht verwenden soll und sich schon garnicht angewöhnen, nur wiel man keine Zeiger auf Klassen kennt, sie verwenden zu wollen.
Wenn du eine Variable der Mainthreadklasse verwenden willst dann greife über eine Zeiger darauf zu.
Einen Zeiger auf CMainframe hollt man sich z.B.
soCMainFrame *pMainFrame=(CMainFrame*)AfxGetMainWnd();
-
Hi Tom!
Danke für den Tip, dass war genau das, was ich gesucht habe...
Allerdings hab ich in meinen 2 VC++-Büchern nix darüber gelesen (und die sind je 500 Seiten dick!).Ich benutze einen Splitter mit 2 Klassen (CFormView,CView) in meinem Programm. (...CreateStatic(0,1,this)...)
Wenn ich jetzt an eine der beiden Klassen etwas senden will, wie kann ich denn das tun?Danke, Gruss, Tobias
-
Ich mache das so, das ich mir über das Mainframe eine Zeiger auf die Klasse de Childframe hole.
Dazu habe ich in der mainframe eine Funktion für jedes weitere Childframe welches mir den Zeiger zurückgibt.In dem eine Child hole ich mir dann den Zeiger zum mainframe und rufe die Funktion auf. Somit kann ich dann mittels dies zeigers von einem child auf das andere Zugreifen.
Ob das jetzt bessert geht ? KA. Es funzt.Insbesonders da ich die Spliterklassen überschrieben habe.
-
Hallo zusammen,
ich habe dass Problem, dass ich ein globales Objekt verwenden möchte. Okay, einige werden jetzt sicher sagen, da hast du wirklich ein Problem weil man globale Objekte nicht verwendet.
Ich möchte das globale Objekt zu einer Member-Variable in einer meiner Klassen machen, damit ich es nicht in jeder Methode neu definieren muss.Meine Lösung (die Leider nicht funktioniert !!!)
#include "Database.h" class CLogin : public CDialog { private: extern CDatabase Database; }Der Compiler Fehler:
error C2071: 'CDatabase' : ungueltige Speicherklassehoffe auf Antwort
-hever-
-
Ups,
hab gerade das extern CDatabase Database in der CPP direkt unter die Database.h include gesetzt und jetzt funktionierts natürlich:#include "Database.h" extern CDatabase Database;sorry
-hever-
-
Na wenn du jetzt ein ruhiges Gewissen hast ist es OK. Ich hätte es nicht.
-
hmm, was meinst du ?