Fensterzugriff aus anderer Klasse



  • Hallo, ich habe ein kleines Problem und zwar habe ich in meiner Fensterklasse im Header eine Instanz der Klasse K angelegt, um von meheren Methoden aus auf diesen Datensatz zugreifen zu können. Jedoch meckert er rum, es fehlt ; vor ...
    Wenn ich Klasse verwende ohne die Form zu übergeben funktioniert alles prächtig.

    Wenn ich die Deklaration Klasse^ k in die Form1.cpp lege bekomme ich die Meldung Fehler 1 error C3145: "k": Eine globale oder statische Variable darf nicht den verwalteten Typ "Klasse ^" aufweisen.

    Vielleicht könnt ihr mir ja weiterhelfen wie ich dieses Problem umgehen kann.

    //Header Form1.h
    public ref class Form1 : System::Windows::Form
    {
         private: Klasse^ k;//Für alle zugriffe 
    	private: void Test(void); //In CPP steht die Definition
    }
    
    //Form1.cpp
    void Form1::Test(void)
    {
     k = gcnew Klasse(this);
    }
    
    //Header Klasse.h
    public ref class Klasse
    {
    	private: Form1^ form1;
    
    	public: Klasse(Form1^ f)
    	{
    		this->form1 = f;
    	}
    }
    

    Mfg Bernd



  • public ref class Form1 : System::Windows::Form
    {
      // ... 
    }
    

    an der letzten Klammer fehlt ein ;



  • mogel schrieb:

    an der letzten Klammer fehlt ein ;

    Sorry das habe ich an dieser Stelle vergessen, im original Code ist es natürlich vorhanden!

    Das Problem tritt erst auf, wenn ich Form1.h (Form1 ist mein Hauptfenster) in Klasse.h einbinden will. Weil ich ja das Fenster erst bekannt machen muss. In Klasse wird ein Event ausgelöst, und wenn dieses ausgelöst wird soll ein bestimmter Button deaktiviert werden. Daher das Objekt.

    Hier beist sich was, nämlich das vorher im Header von Form steht include klasse.h und in klasse.h will ich den Header einbinden vom Hauptfenster.

    Ich könnte auch zur Not nur den Button übergeben aber das finde ich äußerst unsauber. Zumal ich hier wohl auch ein Verständnisproblem habe, da sonst der Fehler nicht auftreten würde.

    Mfg



  • Ok habs selber gelöst. Das Zauberwort heist Vorwärtsdeklaration 😃

    //Header Form1.h
    ref class Klasse;
    
    public ref class Form1 : System::Windows::Form
    {
         private: Klasse^ k;//Für alle zugriffe
        private: void Test(void); //In CPP steht die Definition
    }
    
    //Form1.cpp
    void Form1::Test(void)
    {
     k = gcnew Klasse(this);
    }
    
    //Header Klasse.h
    ref class Form1;
    
    public ref class Klasse
    {
        private: Form1^ form1;
    
        public: Klasse(Form1^ f)
        {
            this->form1 = f;
        }
    }
    

Anmelden zum Antworten