Dekleration einer zusätzlichen Klasse
-
Hallo
an welcher Stelle im Quelltext kann ich in Visual Studio c++ eine neue Klasse erstellen?
Momentan hab ich die Klasse wie folgt implementiert:namespace test { using namespace System; ... public ref struct PARAMETER { PARAMETER () { blabla = gcnew array<String^>(100); } public: array<String^>^ blabla; }; public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); parameter = gcnew array<PARAMETER^>(100); }
Also vor der Klasse Form1. So funktioniert zwar mein Programm einwandfrei, wenn ich aber den Designer von Form1 öffnen will klappt das nicht, da Form1 die erste Klasse sein muss.
Hab es schon an mehreren Stellen versucht, hat aber bisher noch nicht funktioniert.Danke schon mal für die Hilfe
-
Platziere die zusätzliche Klasse in ein eigenes Header und Source File.
Dann inkludiere das Header File dort wo die Klass Form1 steht.
-
tut mir leid wenn ich mich da ein bisschen blöd anstelle, aber ich habe in Form1 ein Array deklariert:
public: array<PARAMETER^>^ parameter;
wo oder wie kann ich das jetzt anpassen?
-
bbb schrieb:
tut mir leid wenn ich mich da ein bisschen blöd anstelle, aber ich habe in Form1 ein Array deklariert:
public: array<PARAMETER^>^ parameter;
wo oder wie kann ich das jetzt anpassen?
Du bist aber auch dämlich, tzzzz
-
geile Antwort! Sieht so aus als ob dus voll drauf hast!
-
Nochmal anders gefragt: Kann ich dann überhaupt noch aus Form1.h auf diese Klasse direkt zugreifen, oder geht das dann nur noch über die source-Datei
-
Du solltest Deklaration ind Implementierung trennen. Das eine gehört in die h-Datei, das andere in die cpp-Datei!
Leider macht dies der WinForms-Design falsch... das ist u.a. *ein* Grund warum C++/CLI vollkommen falsch für sowas ist...
-
OK... aber wie bekomme ich den Eintrag aus dem Konstaruktor von Form1 weg? den kann ich ja schlecht in die cpp Datei auslagern, oder!?
public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); parameter = gcnew array<PARAMETER^>(100); } protected: ...
-
ok, wo ist mein denkfehler?
in Form1.h habe ich jetzt als Konstruktor
Form1(void);
in Form1.cpp habe ich
#include "parameter.h" using namespace test; [STAThreadAttribute] public: array<PARAMETER^>^ parameter; int main(array<System::String ^> ^args) { ... } Form1() { InitializeComponent(); parameter = gcnew array<PARAMETER^>(100); }
und dann habe ich jetzt noch einen neuen Header: parameter.h worin die Klasse deklariert ist:
namespace test { public ref struct PARAMETER { PARAMETER () { xxx = gcnew array<String^>(100); } public: array<String^>^ xxx; }; }
-
Und was geht denn jetzt nicht?
Fehlermeldung?
-
In folgender Zeile in Form1.cpp
#include "parameter.h" using namespace SimPack_auto; [STAThreadAttribute] public: array<PARAMETER^>^ parameter;
kommt folgende Fehlermeldung
error C3145: 'parameter' : global or static variable may not have managed type 'cli::array<Type> ^'
-
Mach parameters zu einem Member deiner Form1 Klasse.
-
danke für die Antwort! wäre super wenn du mir da noch auf die sprünge helfen würdest...Wie mache ich parameter zum member von form1?
Danke
-
Nichts für ungut, aber bevor du mit C++/CLI und WinForms arbeitest, solltest du ersteinmal reines C++ lernen (Du versuchst gerade einen Marathon zu laufen, kannst aber noch nichteinmal krabbeln
-
hab jetzt meine PARAMETER Klasse wie folft deklariert:
public ref struct PARAMETER : public Form1
funktioniert aber trotzdem nicht...
-
Obwohl ich C++/CLI nicht die richtige Sprache halte um mit Programmieren zu beginnen oder überhaupt eine Applikation zur erstellen, bin ich nicht der Meinung, dass man zuerst C++ lernen sollte.
Es ist eine andere Sprache und hat nicht viel gemeinsam. Wozu also C++ lernen?Hier zu noch der bekannte Thread für den Fragesteller:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-263084.htmlMeine Empfehlung ist ganz einfach auf C# umzusteigen.
Simon
-
bbb schrieb:
hab jetzt meine PARAMETER Klasse wie folft deklariert:
public ref struct PARAMETER : public Form1
funktioniert aber trotzdem nicht...
Ist auch komplett falsch.
Hier mal ein Ansatz:
public ref class Form1 : public System::Windows::Forms::Form { private: array<PARAMETER^>^ parameter; public: Form1(void) { InitializeComponent(); parameter = gcnew array<PARAMETER^>(100); } };
-
Danke @theta. Hab den Anatz gleich ausprobiert, aber jetzt kommt wieder folgender Fehler
error C2065: 'PARAMETER' : undeclared identifier
-
Bei der Fehlermeldung wird die Dekleration markiert...
public ref class Form1 : public System::Windows::Forms::Form { private: array<PARAMETER^>^ parameter;
-
theta schrieb:
Hier mal ein Ansatz:
public ref class Form1 : public System::Windows::Forms::Form { private: array<PARAMETER^>^ parameter; public: Form1(void) { InitializeComponent(); parameter = gcnew array<PARAMETER^>(100); } };
Gehört dieser Ansatz in die header- oder in die cpp-Datei? Ich hab ihn in die header Datei geschrieben. Hier kann ich aber parameter.h über include nicht einbinden, oder?