Fehler: function-definition not allowed before '{'
-
Hallo zusammen,
ich versuche mich grade an winsock2 unter zunahme einer Anleitung hier im Forum.
Wenn ich kompilieren möchte (CodeBlocks, GNU GCC Compiler), erhalte ich folgende Fehlermeldung :error: a function-definition is not allowed here before '{' token
Es wird auf folgenden Codeabschnitt gezeigt:
unsigned short my_htons(unsigned short h) { return (h>>8) | (h<<8); }
Worin liegt der Fehler ?
Falls ihr den gesammten Code braucht, sagt bescheid.Danke für eure Hilfe !
Lg
SalamiDealer
-
Der Code den du gezeigt hast ist in Ordnung. Da muss was an dem Code drumrum stinken.
-
int f(){ unsigned short f(){ }
gleicher fehler. vielleicht hast du in der vorigen funktion die klammer am ende vergessen.
-
Ich hab mir den Code jetzt eine lange Zeit angeguckt, aber ich finde keinen Fehler. Vielleicht reicht meine Erfahrung da auch nicht aus.
#include <iostream> #include <winsock2.h> using namespace std; int main(){ WSADATA wsaData; WORD wVersionRequested = MAKEWORD(2,2); int result = WSAStartup(wVersionRequested, &wsaData); if(result != 0){ cout << "Winsock 2 konnte nicht gestartet werden! Error #" << result << endl; return 1; } cout << "Winsock 2 gestartet" << endl; int stream = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (stream == -1){ cout << "Fehler beim erstellen des Socket" << endl; return 1; } cout << "Socket erstellt" << endl; sockaddr_in service; service.sin_family = AF_INET; service.sin_port = htons(80); [b] unsigned short my_htons(unsigned short h){ return (h>>8) | (h<<8); } [/b] string ip; cout << "IP: " << endl; cin >> ip; service.sin_addr.s_addr = inet_addr(ip.c_str()); int result2 = connect(stream, reinterpret_cast<sockaddr*>(&service), sizeof(service)); if(result2 == -1){ cout << "Konnte keine Verbindung herstellen" << endl; return 1; } closesocket(stream); cout << "Ende\n"; return 0; }
-
definiere die htons vor der main und nicht in der main.
-
Vielleicht reicht meine Erfahrung da auch nicht aus
japp - beschäftige dich mit grundlagen, bevor du mit winapi und socket-programmierung anfängst...
bb
-
unskilled schrieb:
Vielleicht reicht meine Erfahrung da auch nicht aus
japp - beschäftige dich mit grundlagen, bevor du mit winapi und socket-programmierung anfängst...
bb
Da wird wohl was dran sein. Hab mich wohl zu früh in die komplexeren Sachen geworfen
volkard schrieb:
definiere die htons vor der main und nicht in der main.
Das würde ich aber, bevor ich sockets an den Nagel hänge, noch gerne besprochen haben.
Wie muss ich das jetzt genau machen ?
So erhalte ich eine Fehlermeldung:
unsigned short my_htons(unsigned short h); int main(){ my_htons(h){ return (h>>8) | (h<<8); } }
So auch:
unsigned short my_htons(unsigned short h); int main(){ unsigned short my_htons(unsigned short h){ return (h>>8) | (h<<8); } }
Sowie in 2-3 anderen Kombinationen.
-
Du solltest auch nicht herumexperimentieren, sondern Theorie anschauen, das sind wirklich triviale Grundlagen.
Lokale Funktionsdefinitionen sind in C++ nicht erlaubt, der Block muss sich ausserhalb von anderen Funktionen befinden.
-
Wie wäre es mit:
unsigned short my_htons(unsigned short h){ return (h>>8) | (h<<8); } int main(){ }
?
-> Grundlagen lernen! Kauf ein Buch, oder schau dir wenigstens ein gutes Tutorial.
-
Alles klar funktioniert.
Dankeschön euch allendrakon schrieb:
-> Grundlagen lernen! Kauf ein Buch, oder schau dir wenigstens ein gutes Tutorial.
Ich hab mir von einen Kollegen den DVD-Kurs "Video2Brain - Jetzt lerne ich C++" ausgeliehen.
Die Grundlagen fand ich sehr gut erklärt, aber beim ersten mal durchsehen hab ich mir natürlich noch nicht alles verinnerlicht.
-
Ich kann mir kaum vorstellen, dass Video2Brain besser/effektiver sein sollte als nen Buch...