Funktion in .cpp auslagern funktioniert nicht
-
Hallo Leute,
bin gerade erst in die Programmierung mit WindowsForms eingestiegen und hoffe ihr könnt mir bei einem Problem helfen:
Und zwar merke ich, dass die Form1.h sich doch ziemlich schnell füllt und somit auch unübersichtlich wird. Nun wollte ich eine Funktion in eine andere .cpp Datei auslagern. Als ich mich noch mit Konsolenanwendungen beschäftigt habe, war das kein Problem. Die Methode funktioniert aber anscheinend hierbei nicht mehr:Hier mal ein Auszug aus dem Quellcode:
Form1.h:
void test();
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { test(); }
funktion.cpp: (Beispiel)
#pragma once #include "stdafx.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; void test() { int i; i = Convert::ToInt32( textBox1->Text ); MessageBox::Show(i.ToString()); }
Das nur als Beispiel.
Wenn ich nun debugge bekomm ich dann folgenden Fehhlermeldung:1>.\test.cpp(14) : error C2065: 'textBox1': nichtdeklarierter Bezeichner 1>.\test.cpp(14) : error C2227: Links von "->Text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 1> Typ ist ''unknown-type''
Wenn ich die gleiche Funktion in Form1.h belasse klappt alles wunderbar.
-
void test() => void Form1::test()
-
void Form1::test() { int i; i = Convert::ToInt32( textBox1->Text ); MessageBox::Show(i.ToString()); }
Hmm... brachte leider keine Verbesserung:
1>.\test.cpp(12) : error C2653: 'Form1': Keine Klasse oder Namespace 1>.\test.cpp(15) : error C2065: 'textBox1': nichtdeklarierter Bezeichner 1>.\test.cpp(15) : error C2227: Links von "->Text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 1> Typ ist ''unknown-type''
-
Na einbinden mußt Du den Header schon.
-
Form1.h ist bereits eingebunden:
funktionen.cpp:
#pragma once #include "stdafx.h" #include "Form1.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; void Form1::test() { int i; i = Convert::ToInt32( textBox1->Text ); MessageBox::Show(i.ToString()); }
-
Deine Form1 ist sicherlich einem Namespace zu geordnet, der fehlt dir noch. Schau mal in der Header-Datei nach.
#pragma once #include "stdafx.h" #include "Form1.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace PROJEKTNAME { void Form1::test() { int i; i = Convert::ToInt32( textBox1->Text ); MessageBox::Show(i.ToString()); }´ }
PROJKETNAME durch den richtigen Namespace ersetzen.
MfG
Marco
-
Super, danke hat geklappt,
Hab jetzt aber direkt ein neues "Problem", aber rein optisch.
Da ich die Voids folgendermaßen einfüge:
Form1.h
public ref class Form1 : public System::Windows::Forms::Form { void test(); // <-- public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } . . .
Werden ab jetzt komischerweise die ganzen Buttons, TextBoxen usw. ebenfalls dort erstellt: ( z.B )
public ref class Form1 : public System::Windows::Forms::Form { void test(); private: System::Windows::Forms::TextBox^ textBox2; // <-- private: System::Windows::Forms::Label^ label2; // <-- public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } . . .
Ist zwar eigentlich nicht schlimm, ist aber nervig sie immer wieder zu den anderen zu tun. Ist das ein Bug von VC++ Express oder ist das so "gewollt" ?