Verständnisproblem "Globale Variablen" in Windows Forms



  • Hallo,

    ich programmiere nun seit einiger Zeit mit Visual C++ 2008 Express.
    Und zwar Windows-Forms Anwendungen.

    Momentan arbeite ich mich in Socketprogrammierung ein. Jedoch behindert mich wieder ein Problem, dass ich auch früher schon hatte.

    Wenn ich nun eine Funktion schreibe, die beim Drücken eines Buttons einen Socket erstellt, funktioniert das wunderbar:

    private: System::Void sock_button_Click(System::Object^  sender, System::EventArgs^  e) {
    
    			 SOCKET s;
    
    			 s = socket(AF_INET,SOCK_STREAM,0);
    			 if(s==INVALID_SOCKET) {
    				 this->sock_label->Text = "Fehler";
    			 }
    			 else {
    				 this->sock_label->Text = "OK";
    			 }
    
    		 }
    

    Nun möchte ich allerdings mit einem anderen Button den Socket öffnen:

    private: System::Void con_button_Click(System::Object^  sender, System::EventArgs^  e) {
    /* Gekürzt */
    
    rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
    /* Gekürzt */
    
    }
    

    Verständlicherweise motzt der Compiler jetzt dass "s" ja noch gar nicht definiert ist. Wie schaffe ich es, dass er eben auf das "s" zugreift, dass ich oben erstellt habe. Schliesslich möchte ich ja genau den Socket verbinden, den ich auch oben erstellt habe.. 😕.

    Ich habe es mal versucht ganz oben ein

    extern SOCKET s;
    

    einzufügen. Dies wurde jedoch sogleich von einigen Linkerfehlern zunichtegemacht.

    Wie muss ich das machen?

    Schon einmal Vielen Dank für jede Hilfe 🙂

    Grüsse, Killer07



  • Du mußt Socket Global vereinbaren.
    SOCKET ist im Moment Lokal also private:
    Also mach SOCKET public:
    Aber denke an die Datenkapselung.
    So Global wie nötig und so Global wie nötig.
    Global ist nicht die beste Lösung für Dein Problem

    Grüßli



  • So Global wie nötig und so Global wie nötig.

    Ich denke es heisst...

    "So Lokal wie möglich und Global wie nötig"

    ...Aber das meinst du bestimmt... 😉



  • Ja das meinte ich, blöder Schreibfehler 🙄


Anmelden zum Antworten