Funktion akzeptiert keine 0 Argumente?!

  • C++/CLI

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Parmaster.

    Funktion akzeptiert keine 0 Argumente?!

    Hey Community!
    Ich habe derzeit ein kleines Problem, wo ich einfach nicht mehr weiter weiß.
    Ich hatte zwar schon eine Klasse angelegt (Header & co.), bekam aber haufen hafte Errors weil das Symbol irgendwie auf was externen nicht zugreifen konnte!

    Deswegen habe ich es einfach in die Main Datei getan und bekomme folgenden Error: "Fehler 1 error C2660: 'connect': Funktion akzeptiert keine 0 Argumente"
    Obwohl ich bei meiner Funktion keine Argumente übergebe...
    Code:

    C-Quellcode

    1. #include <iostream>
    2. #include "Core.h"
    3. #include <WinSock2.h>
    4. using namespace std;
    5. int main() {
    6. Core C;
    7. C.Env();
    8. connect();
    9. getchar();
    10. return 0;
    11. }
    12. void connect() {
    13. WSAData wsa;
    14. WORD Version = MAKEWORD(2, 1);
    15. WSAStartup(Version, &wsa);
    16. SOCKET Listen = socket(AF_INET, SOCK_STREAM, NULL);
    17. SOCKET Connect = socket(AF_INET, SOCK_STREAM, NULL);
    18. SOCKADDR_IN Server;
    19. Server.sin_addr.s_addr = inet_addr("127.0.0.1");
    20. Server.sin_family = AF_INET;
    21. Server.sin_port = htons(80);
    22. bind(Listen, (SOCKADDR*)&Server, sizeof(Server));
    23. listen(Listen, 1);
    24. int size = sizeof(Server);
    25. cout << "Starting Server...";
    26. for (;;) {
    27. if (Connect = accept(Listen, (SOCKADDR*)&Server, &size)) {
    28. cout << "Connection was reached";
    29. break;
    30. }
    31. }
    32. WSACleanup();
    33. }

    Wo ist nun mein Fehler?
    MfG.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „meikel__“ ()

    Du rufst zig Methoden auf, sagst uns aber nicht bei welcher der Fehler auftritt.....
    Edit: Sorry verlesen...
    Edit²: Kanns sein, dass es einen Methodenkonflikt gibt? Ich meine das es die connect() Funktion/Methode im Namespace zweimal gibt? Du hast sie einmal definiert, aber es kann auch sein, dass es die Funktion in Core.h, WinSock2.h oder iostream gibt. Benenne deine Funktion mal um und schau ob´s dann klappt.

    Edit³: Ich kenne mich mit C++ so gut wie garnicht aus, aber als ich erste Versuche gemacht habe, hatte ich Probleme mit Methoden weil ich diese aufgerufen habe bevor sie definiert wurden, versuch also außerdem mal die connect() Methode über die Main zu schreiben.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Markus Jacobs“ ()

    Markus Jacobs schrieb:

    Du rufst zig Methoden auf, sagst uns aber nicht bei welcher der Fehler auftritt.....

    In der Main-Funktion:

    C-Quellcode

    1. int main() {
    2. Core C;
    3. C.Env();
    4. connect();
    5. getchar();
    6. return 0;
    7. }

    connect(); <- Hier wirds aufgerufen, und dann bekomme ich den oben genannte Fehlermeldung!
    MfG.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „meikel__“ ()

    Markus Jacobs schrieb:

    Habe noch paar Edits in meinem ersten Beitrag gemacht, schau mal ob da was für dich dabei ist.

    Hab mal deine erste Methode probiert, bekam aber die Fehlermeldung das der Bezeichner fehlt...
    Ich probiere danach deine 2th Methode und bekam wieder folgende Errors:

    Fehler 16 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSACleanup@0". C:\Users\BerndLauert\documents\visual studio 2013\Projects\Chat\Chat\TCP.obj Chat
    & more...

    MfG.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „meikel__“ ()

    Gonger96 schrieb:

    Erst Methode definieren, dann verwenden. Mach da ausserdem ne Klasse raus.


    Wollt ich auch gerade schreiben.

    C-Quellcode

    1. ​#include <iostream>
    2. #include "Core.h"
    3. #include <WinSock2.h>
    4. using namespace std;
    5. void connect2();
    6. int main() {
    7. Core C;
    8. C.Env();
    9. connect();
    10. getchar();
    11. return 0;
    12. }
    13. void connect2() {
    14. WSAData wsa;
    15. WORD Version = MAKEWORD(2, 1);
    16. WSAStartup(Version, &wsa);
    17. SOCKET Listen = socket(AF_INET, SOCK_STREAM, NULL);
    18. SOCKET Connect = socket(AF_INET, SOCK_STREAM, NULL);
    19. SOCKADDR_IN Server;
    20. Server.sin_addr.s_addr = inet_addr("127.0.0.1");
    21. Server.sin_family = AF_INET;
    22. Server.sin_port = htons(80);
    23. bind(Listen, (SOCKADDR*)&Server, sizeof(Server));
    24. listen(Listen, 1);
    25. int size = sizeof(Server);
    26. cout << "Starting Server...";
    27. for (;;) {
    28. if (Connect = accept(Listen, (SOCKADDR*)&Server, &size)) {
    29. cout << "Connection was reached";
    30. break;
    31. }
    32. }
    33. WSACleanup();
    34. }

    Parmaster schrieb:

    Gonger96 schrieb:

    Erst Methode definieren, dann verwenden. Mach da ausserdem ne Klasse raus.


    Wollt ich auch gerade schreiben.

    C-Quellcode

    1. ​#include <iostream>
    2. #include "Core.h"
    3. #include <WinSock2.h>
    4. using namespace std;
    5. void connect2();
    6. int main() {
    7. Core C;
    8. C.Env();
    9. connect();
    10. getchar();
    11. return 0;
    12. }
    13. void connect2() {
    14. WSAData wsa;
    15. WORD Version = MAKEWORD(2, 1);
    16. WSAStartup(Version, &wsa);
    17. SOCKET Listen = socket(AF_INET, SOCK_STREAM, NULL);
    18. SOCKET Connect = socket(AF_INET, SOCK_STREAM, NULL);
    19. SOCKADDR_IN Server;
    20. Server.sin_addr.s_addr = inet_addr("127.0.0.1");
    21. Server.sin_family = AF_INET;
    22. Server.sin_port = htons(80);
    23. bind(Listen, (SOCKADDR*)&Server, sizeof(Server));
    24. listen(Listen, 1);
    25. int size = sizeof(Server);
    26. cout << "Starting Server...";
    27. for (;;) {
    28. if (Connect = accept(Listen, (SOCKADDR*)&Server, &size)) {
    29. cout << "Connection was reached";
    30. break;
    31. }
    32. }
    33. WSACleanup();
    34. }

    Schön und gut, ich erhalte dann Massenhafte Fehlermeldungen
    Screen: puu.sh/cPpe2/2272cd11d6.png

    MfG.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „meikel__“ ()

    Also wenn ich den Code mal drastisch auf das nötigste kürze, aber die Struktur beibehalte, funktioniert er.

    C-Quellcode

    1. #include <iostream>
    2. #include <conio.h>
    3. #include <WinSock2.h>
    4. using namespace std;
    5. void connect2();
    6. int main() {
    7. connect2();
    8. getch();
    9. return 0;
    10. }
    11. void connect2() {
    12. cout<<"hallo"<<endl;
    13. }


    Kommentiere mal Zeile 5 (void connect2();)aus, dann siehste es.

    Und der Code von oben hat eh noch einen Fehler, deshalb nicht einfach nur kopieren.