2017-06-19 3 views
0

So schreibe ich habe einige Client-Server-Code Multi-Threading verwendet und ich schrieb diese Funktion:Begriff nicht ausgewertet zu einer Funktion 1 Argument nehmen

void TriviaServer::accept() 
{ 
      // this accepts the client and create a specific socket from server to this client 
    SOCKET client_socket = ::accept(_socket, NULL, NULL); 

    if (client_socket == INVALID_SOCKET) 
     throw std::exception(__FUNCTION__); 
// make a thread that will handle the new client 
    std::thread t(&TriviaServer::clientHandler, this, client_socket); 
    t.detach(); 
} 

und Visual Studio sagt, das Problem ist:

Fehler C2064: Ausdruck ergibt keine Funktion unter 1 Argumente

ich weiß, eine Frage mit dem gleichen Namen gibt es ich habe, aber ich konnte das Sol sehen in der Antwort.

Die Funktion Handelte-Client wird durch die folgende Zeile erklärt:

void clientHandler(SOCKET); 

Der Fehler trat auf, nachdem ich die Zeile geändert:

ist
std::thread t(&TriviaServer::clientHandler, this, client_socket); 

Diese Funktion unendlich genannt wird, während jedes Mal neuen Client akzeptieren und ihn mit dem clientHandler zu behandeln, diese Funktionen befinden sich in der Klasse namens TriviaServer.

+0

@Carcigenicate Ich habe diesen Beitrag gesehen, von dem du sprichst, und es gibt keine Antwort auf meine Frage, wie ich oben gesagt habe. –

+1

@Carcigenicate Das sieht nicht richtig aus. – NathanOliver

+0

@TalSokolinsky Sind Sie sicher, dass das die einzige Zeile ist, die Sie geändert haben? – Rakete1111

Antwort

1

std::exception's constructor nimmt keine oder std::string als Parameter. Sie müssen eine andere Ausnahmeklasse wie verwenden, die einen solchen Konstruktor bereitstellt.

Sie könnten auch Ihre eigene Ausnahmeklasse bereitstellen, wenn Sie möchten.

+0

Ich versuchte, das zu ändern Ausnahme, aber es hat nicht funktioniert, auch nachdem ich die Zeile gelöscht habe, wo ich die Ausnahme verworfen habe, blieb der ursprüngliche Fehler bestehen. –

+0

@TalSokolinsky Dann müssen Sie eine [mcve] bereitstellen, weil ich nichts anderes sehen kann, das nicht kompilieren würde. – Rakete1111

Verwandte Themen