zugriff auf variable
-
hallo,
#include "StdAfx.h" using namespace PitPlaner; //ViewScreen mainWindow; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // Hauptfenster erstellen und ausführe ViewScreen^ mainWindow = gcnew ViewScreen(); Application::Run(mainWindow); return 0; }
ich will aus einer anderen klasse auf die Variable mainWindow zugreifen das krieg ich aber nicht hin. wenn ich diese auserhalb der main methode deklariere bekomme ich folgenden fehler:
.\PitPlaner.cpp(8) : error C3145: "mainWindow": Eine globale oder statische Variable darf nicht den verwalteten Typ "PitPlaner::ViewScreen ^" aufweisen.
Eine globale oder statische Variable oder ein Member eines systemeigenen Typs, der auf Objekte im gc-Heap verweist, kann nicht deklariert werden.
.\PitPlaner.cpp(7) : error C3115: "System::STAThreadAttribute": Dieses Attribut ist für "mainWindow" nicht zulässig.
d:\winnt\microsoft.net\framework\v2.0.50727\mscorlib.dll: Siehe Deklaration von 'System::STAThreadAttribute'
Das Attribut kann nur angewendet werden auf: 'member function'
AssemblyInfo.cpp
Code wird generiert...
Das Buildprotokoll wurde unter "file://e:\c_progs\PitPlaner\PitPlaner\Debug\BuildLog.htm" gespeichert.
PitPlaner - 2 Fehler, 6 Warnung(en)
-
Wie war die Frage ?
error C3145: "mainWindow": Eine globale oder statische Variable darf nicht den verwalteten Typ "BBK3PitPlaner::ViewScreen ^" aufweisen.
Da steht doch das Problem.
Du kannst:
ne Klasse mit nem statischen Member anlegen
mit nem Singleton rummurksenoder die Instanz der Form an Dein Objekt übergeben.
Btw.: Globale Variablen sind zwar manchmal ein Heilmittel aber weißen immer auf ein schlechtes Design hin.
-
dieses ViewScreen bleibt so lange bestehen bis die anwendung geschlossen wird von daher will ich das es eine globale variable ist. da ich c++ code noch nicht beherrsche sagen mir die fehlermeldungen nie viel. ich würde ja gern globale variablen anlegen aber wie auserhalb der main methode klappt es nicht.
-
Und was ist an
"mainWindow": Eine globale oder statische Variable darf nicht den verwalteten Typ "BBK3PitPlaner::ViewScreen ^" aufweisen
so missverständlich ? Es geht nicht, Du wirst ausweichen müssen:
ne Klasse mit nem statischen Member anlegen
mit nem Singleton rummurksenoder die Instanz der Form an Dein Objekt übergeben.
-
wenn ich das object übergebe und mit this->Owner zugreifen will wird meine variable aus ViewScreen die dort deklariert habe nicht angezeigt.
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-172465.html
Und ganz wichtig:
http://www.lugbz.org/documents/smart-questions_de.html
ganz besonders:
http://www.lugbz.org/documents/smart-questions_de.html#beprecise
-
ich übergebe ein object an eine anderes. jetzt greife ich auf das übergebene objekt mit dem befehl this->Owner zu. ist das nicht gut erklärt? ich habe jetzt schon selbst gesehen das owner eine form zurückgibt ich brauche aber das codeobjekt die *.h. welche methode oder property liefert mir diese?
die übergabe sieht so aus:
LoadProject load; load.ShowDialog(this);
jetzt möchte ich aus der loadProject klasse auf dieses object drauf zugreifen das ich mit this übergeben habe.
indem ich schreibe this->........
this steht in dem fall natürlich für das object in dem ich mein übergebenes object aufrufe.
-
Ne das is so gut erklärt wie:
Morgens geht die Sonne auf und Abends geht sie unter.
Du hast irgendein Objekt das Dir irgendeine Variable zurück liefern soll.
Das wird dann irgend ein Property erledigen das Du ggf. irgendwo selbst definieren musst. Is das nich gut erklärt ?Und was soll ein Codeobjekt *.h. sein ?