Visual Studio Community 2017 - überladene Funktion auswählen



  • Hallo liebe Community! 🙂

    Ich habe ein Problem bei Visual Studios.

    Ich bin im Moment dabei ein kleines Chat-Programm zu schreiben und benutze dafür die winsocks2.h Headerdatei, um eine TCP-Verbindung aufzubauen. Dort gibt es die funktion bind(...) die ich auch problemlos verwenden konnte. Nun wollte ich die Standard-Headerdatei thread inkludieren, um dank Multithreading mehrere Funktionalitäten zu parallelisieren. Mein Problem ist nun, dass die Funktion bind() derart überladen ist, dass Visual Studio diese Funktion automatisch als Funktion "binder()" von der Headerdatei "thread" deklarieren möchte und nicht mehr kompiliert.

    Gibt es eine Möglichkeit hier eine manuelle Auswahl zu treffen?

    Die Zeile lautet:

    rc = bind(acceptSocket, (SOCKADDR*)&addr, sizeof(addr));
    

    wobei rc ein long ist und bind() Rot unterkringelt.

    Die Fehlermeldung beim kompilieren lautet:

    error C2440: "=": "std::_Binder<std::_Unforced,SOCKET &,SOCKADDR *,unsigned int>" kann nicht in "long" konvertiert werden

    Sobald ich die Headerdatei "thread" wieder rausnehme, funktioniert alles tadellos.

    Vielen Dank für eure Hilfe! 😘



  • Du benutzt using namespace std;?

    Versuche ::bind.



  • @manni66 sagte in Visual Studio Community 2017 - überladene Funktion auswählen:

    Du benutzt using namespace std;?

    Versuche ::bind.

    Ja habe ich benutzt. "::bind" hat das Problem gelöst. Programm kompiliert und die Unterkringelung ist weg.
    Gehe ich recht der Annahme, dass "::" die Funktion bind() vom namespace "std" wieder befreit?

    Vielen Dank für die schnelle Lösung!👍🏻



  • Gehe ich recht der Annahme, dass "::" die Funktion bind() vom namespace "std" wieder befreit?

    Man könnte es so formulieren. Es besagt, dass die Funktion nicht in einem Namespace zu finden ist (oder auch im sogenannten globalen Namespace).



  • @manni66

    @manni66 sagte in Visual Studio Community 2017 - überladene Funktion auswählen:

    Gehe ich recht der Annahme, dass "::" die Funktion bind() vom namespace "std" wieder befreit?

    Man könnte es so formulieren. Es besagt, dass die Funktion nicht in einem Namespace zu finden ist (oder auch im sogenannten globalen Namespace).

    Deutlich besser formuliert als meine "Vermutung".
    Danke!


Log in to reply