schorschi Geschrieben 1. September 2005 Geschrieben 1. September 2005 Hallo, ist bin Anfänger und bin auf folgendes Problem gestoßen. Ich möchte eine eigene Klasse schreiben für die Nutzung von Socket.Da ich mich auf der Arbeit befinde und meinen Quelltext nicht dabei habe rekonstruiere ich die Zeilen mal. #include "winsock2.h" #include "stdio.h" ... ... class test { private: long rc; SOCKET s; public : void testfunktion(); } void testfunktion() { rc=999; s=Beispielwertwert; } .... jetzt mein Problem : ich kann "normale" oder besser Standartvariablen wie z.B. long, char,int in der Klassen deklarieren und in den Funktionen nutzen. ABER !!! Ich kann keine Variable vom Typ SOCKET deklarieren und dann in den Funktionen weiternutzen. Ich kann höchsten die Variable direkt in den Funktionen deklarieren und nutzen. Da ich aber einige dieser Variablen funktionsübergreifend nutzen möchte und muß und ich nicht mit Rückgabewerten für die Variablen arbeiten möchte stehen ich vor dem Problem wie ich eine Variable vernünftig deklarieren kann. Im Konstruktor funktioniert es auch nicht. Sehr wahrscheinlich ein verständnissproblem von mir. Gruß Joerg :eat: Zitieren
Klotzkopp Geschrieben 1. September 2005 Geschrieben 1. September 2005 Ich kann keine Variable vom Typ SOCKET deklarieren und dann in den Funktionen weiternutzen.Was heißt "du kannst nicht"? Bekommst du eine Fehlermeldung? Falls ja, welche? Im Konstruktor funktioniert es auch nicht.Siehe Signatur. Zitieren
schorschi Geschrieben 1. September 2005 Autor Geschrieben 1. September 2005 Was heißt "du kannst nicht"? Bekommst du eine Fehlermeldung? Falls ja, welche? Siehe Signatur. Ja eine Fehlermeldung des Compilers genauer gesagt drei pro deklarationsversuch. 1.) error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 's' 2.) error C2501: 'SOCKET' : Fehlende Speicherklasse oder Typbezeichner 3.) error C2501: 's' : Fehlende Speicherklasse oder Typbezeichner Hier der Originalcode der Headerdatei : ............ #if !defined(AFX_MYSOCKET_H__C7082FA5_CE95_4353_892E_EB38F294C1F1__INCLUDED_) #define AFX_MYSOCKET_H__C7082FA5_CE95_4353_892E_EB38F294C1F1__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class mySocket { public: char buf[256]; void Programmablauf(); long rc; SOCKET s; SOCKADDR_IN addr; mySocket(); virtual ~mySocket(); protected: void Daten_austauschen(); void Socket_verbinden(); void Socket_erstellen(); int startWinsock(); }; #endif // !defined(AFX_MYSOCKET_H__C7082FA5_CE95_4353_892E_EB38F294C1F1__INCLUDED_) ......... Jetzt ist mir folgendes aufgefallen im Header selbst ist kein #include <winsock2.h> angegeben. Füge ich die Zeile mit dem Include oben ein verschwinden die Fehlermeldung. Kann mir da jemand fürs verständniss weiterhelfen ?!? Ich denke die includeangaben gehören in die *.cpp datei. Zitieren
Klotzkopp Geschrieben 2. September 2005 Geschrieben 2. September 2005 Kann mir da jemand fürs verständniss weiterhelfen ?!? Ich denke die includeangaben gehören in die *.cpp datei. Nein, so pauschal kann man das nicht sagen. Man muss sich klarmachen, dass include-Direktiven nichts weiter bewirken, als vom Präprozessor durch den Inhalt der angegebenen Datei ersetzt zu werden. Du kommst also ohne die include-Direktive in der Headerdatei aus, wenn du in jeder .cpp-Datei, die diese Headerdatei benutzt, vor die include-Direktive der Headerdatei die für winsock2.h setzt. Entscheidend ist nur, dass hinterher, wenn alle include-Direktiven ausgewertet sind, der Inhalt von winsock2.h vor dem Inhalt deiner Headerdatei in der .cpp-Datei landet. Zitieren
schorschi Geschrieben 2. September 2005 Autor Geschrieben 2. September 2005 Danke für die schnelle Antwort. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.