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?


Log in to reply