Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

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. :(

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.

Danke für die schnelle Antwort.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.