Datenaustausch Klasse <-> Form
-
Natürlich nicht dieser namespace sondern der, wo Dein "Form1" drin ist! Schau doch mal in die Form1.h-Datei, dann siehst Du es...
-
Hallo,
die Form1.h ist im Namespace "projekt". Hier sind die ersten Zeilen von Form1.h:Form1.h
#pragma once #include "klasse.h" namespace projekt { ...
Ich habe nun den Namespace "projekt" auch in die Klasse "klasse.h" eingebunden:
klasse.h
#pragma once #include "Form1.h" namespace projekt { ref class klasse { public: static System::String ^zugriff(Form1^ instance) { instance->MeinText = "Text_123"; } }; }
Ich bekomme aber weiterhin folgende Fehlermeldung:
1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\projekt\projekt\klasse.h(10) : error C2061: Syntaxfehler: Bezeichner 'Form1' 1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\projekt\projekt\klasse.h(12) : error C2065: 'instance': nichtdeklarierter Bezeichner 1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\projekt\projekt\klasse.h(12) : error C2227: Links von "->MeinText" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 1> Typ ist ''unknown-type'' 1>klasse.cpp 1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\projekt\projekt\Form1.h(105) : error C2653: 'klasse': Keine Klasse oder Namespace 1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\projekt\projekt\Form1.h(105) : error C3861: "zugriff": Bezeichner wurde nicht gefunden.
Woran kann das liegen ?
Vielen Dank,
mfg philipp_s
-
Form1.h
#include "klasse.h" ... private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { klasse::zugriff(this); }
klasse.h
#pragma once using namespace System::Windows::Forms; ref class klasse { public: static System::Void zugriff(Form^ instance) { instance->Text = "Text_123"; } };
Warum String? Bei String musst Du einen Wert zurückgegeben, in diesem Fall völliger Gouda, also in Void geändert. Form1 muss auch nicht in klasse.h eingebunden werden, wird ja übergeben.
Gute Nacht...
Doug_HH
-
Hier sieht man mal wieder, dass eine Implementierung *nicht* in die h-Datei gehört!
Trenne deklaration und Implementierung, dann hast Du keine Probleme...Doug_HH liegt leider auch falsch: In "klasse.h" muss zumindest eine forward deklaration auf Form1 erfolgen; sonst kann man ja nicht auf das Property "MeinText" zugreifen.
Die Implementierung muss dann in klasse.cpp erfolgen!
-
Jochen Kalmbach schrieb:
Hier sieht man mal wieder, dass eine Implementierung *nicht* in die h-Datei gehört!
Trenne deklaration und Implementierung, dann hast Du keine Probleme...Doug_HH liegt leider auch falsch: In "klasse.h" muss zumindest eine forward deklaration auf Form1 erfolgen; sonst kann man ja nicht auf das Property "MeinText" zugreifen.
Die Implementierung muss dann in klasse.cpp erfolgen!Hast in beiden Fällen Recht, habe die Property übersehen.
Lege in der Tat noch ein klasse.cpp an.
-
Hallo,
also mit dem Code von Doug_HH kann ich zumindest auf die Eigenschaften von Form1 zugreiffen, leider aber nicht auf die Propertys. Das würde ich jetzt gerne noch ändern.Hier ist mein Versuch. Ich habe versucht alle eure Ratschläge umzusetzen:
Form1.h
#pragma once #include "klasse.h" namespace xxxc { using namespace System; ... private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { klasse::aufruf(this); }
klasse.h
#pragma once #include "Form1.h" using namespace System::Windows::Forms; ref class klasse { public: static System::Void aufruf(Form^ instance); };
klasse.cpp
#pragma once #include "StdAfx.h" #include "klasse.h" using namespace System::Windows::Forms; System::Void klasse::aufruf(Form^ instance) { instance->MeinText = "Text123"; }
Hier sieht man mal wieder, dass eine Implementierung *nicht* in die h-Datei gehört!
Trenne deklaration und Implementierung, dann hast Du keine Probleme...Das habe ich geändert.
Doug_HH liegt leider auch falsch: In "klasse.h" muss zumindest eine forward deklaration auf Form1 erfolgen; sonst kann man ja nicht auf das Property "MeinText" zugreifen.
Die Implementierung muss dann in klasse.cpp erfolgen!Ich habe Form1.h nun in klasse.cpp eingebunden. Ist das so richtig ?
Ich habe auch versucht den Namespace xxxc einzubinden. Der Code hat aber trotzdem nicht funktioniert.
Könnt ihr mir da bitte weiterhelfen ?
Vielen Dank,
mfg philipp_s
-
Hallo,
könnt ihr mir sagen wie ich von der Klasse aus auf das Property in Form1 zugreiffen kann ?Hier ist nochmal die gekürzte Form1 (mit Property):
#pragma once #include "klasse.h" namespace xxxc { using namespace System; ... public: property String ^MeinText { void set(String^ value) { this->Text = value; } } ... private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { klasse::aufruf(this); }
Vielen Dank,
mfp philipp_s
-
Hi
Warum hast du denn bei klasse.h nicht noch
#pragma once #include "Form1.h" using namespace System::Windows::Forms; using namespace (projekt name xyz)
implentiert.
Sorry falls irgend was falsch sein sollte bin auch kein pro.
MFG Sebastian
-
Bitte aber das ; nicht vergessen.
using namespace xyz;
Hatte ich leider vergessen mit bei zu schreiben
-
Hallo,
also ich habe in der klasse.h und in klasse.cpp jetzt den Namespace eingebunden:klasse.h
#pragma once #include "Form1.h" using namespace System::Windows::Forms; namespace xxxc { ref class klasse { public: static System::Void aufruf(Form^ instance); }; }
klasse.cpp
#pragma once #include "StdAfx.h" #include "klasse.h" using namespace System::Windows::Forms; namespace xxxc { System::Void klasse::aufruf(Form^ instance) { Form1^ i; i->MeinText = "Hallo"; } }
Es funktioniert aber immer noch nicht. Ich bekomme immer diese Fehlermeldung:
1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\xxxc\xxxc\Form1.h(103) : error C2653: 'klasse': Keine Klasse oder Namespace
1>c:\dokumente und einstellungen\benjamin\eigene dateien\visual studio 2008\projects\xxxc\xxxc\Form1.h(103) : error C3861: "aufruf": Bezeichner wurde nicht gefunden.In Form1.h kennt er die klasse.h nun anscheinende nicht mehr, obwohl sie includet ist.
Aufruf der Klasse in Form1.h
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { klasse::aufruf(this); }
Was mache ich falsch ? Könnt ihr mir da weiterhelfen ?
Vielen Dank,
mfg philipp_s