windows form referenz an methoder übergeben
-
ich hab eine windows form klasse in der ich eine instanz einer klasse CNCThread erstelle. Einer Methode
dieser instanz möchte ich dann die referenz der windows Form (CNC_Form) übergeben.
Lieder bekomme ich nur folgende Fehlermeldung:error C2664: 'CNCThread::StartTest': Konvertierung des Parameters 1 von 'TEST::CNC_Form ^const ' in 'CNC_Form ^const ' nicht möglich
Kann mir jemand sagen was hier falsch ist?
#include "CNCThread.h" #pragma once namespace TEST { public ref class CNC_Form : public System::Windows::Forms::Form { public: CNCThread^ cnc_thread; CNC_Form(void) { cnc_thread = gcnew CNCThread; } private: System::Void btnAutoDir_Click_1(System::Object^ sender, System::EventArgs^ e) { cnc_thread->StartTest(this); } }; } //CNC_Thread.h #include "CNC_Form.h" ref class CNC_Form; public ref class CNCThread { public: bool StartTest(CNC_Form ^bla) { } };
-
Du hast den namespace vergessen bei der Klassendeklaration:
// CNC_Thread.h namespace TEST { ref class CNC_Form; }
Und dann auch TEST::CNC_Form verwenden.
Oder aber auch die Klasse CNCThread in denselben Namensbereich packen
-
ok hab das ganze jetzt geändert in:
#include "CNCThread.h" #pragma once namespace TEST { public ref class CNC_Form : public System::Windows::Forms::Form { public: CNCThread^ cnc_thread; CNC_Form(void) { cnc_thread = gcnew CNCThread; } private: System::Void btnAutoDir_Click_1(System::Object^ sender, System::EventArgs^ e) { cnc_thread->StartTest(this); } }; } //CNC_Thread.h #include "CNC_Form.h" namespace TEST { ref class CNC_Form; } public ref class CNCThread { public: bool StartTest(TEST::CNC_Form ^bla) { bla->textControl->AppendText("zzz"); } };
Wenn ich dann die methode StartTest mit
bla->textControl->AppendText("zzz");
aufrufe bekomme ich die fehlermeldung:
Verwendung des undefinierten Typs "TEST::CNC_Form" Links von "->textControl" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden
-
Du hast doch schon die Vorwärtsreferenz, daher lösche
#include "CNC_Form.h"
Denn dadurch hast du einen Ringschluß erzeugt (beide Header binden sich gegenseitig ein).
-
ok hab ich gemacht.
Die fehlermeldung bleibt leider die gleiche.lg
#include "CNCThread.h" #pragma once namespace TEST { public ref class CNC_Form : public System::Windows::Forms::Form { public: CNCThread^ cnc_thread; CNC_Form(void) { cnc_thread = gcnew CNCThread; } private: System::Void btnAutoDir_Click_1(System::Object^ sender, System::EventArgs^ e) { cnc_thread->StartTest(this); } }; } //CNC_Thread.h namespace TEST { ref class CNC_Form; } public ref class CNCThread { public: bool StartTest(TEST::CNC_Form ^bla) { bla->textControl->AppendText("zzz"); } };
-
Ach so: Trennung von Header und Source!
In der Headerdatei nur die Vorwärtsdeklaration und im Source kannst du dann den anderen Header "CNC_Form.h" einbinden.
-
ok das heisst wenn ich header und source nicht trenne, also nur eine .h datei
habe, gibt es keine mögliche lösung?