4 Stimmen

Boost ASIO async_accept Kompilierung schlägt fehl

Mann... dachte, dass die Verwendung von ASIO in Boost einfach und intuitiv sein würde. :P

Ich fange langsam an, es zu verstehen, aber ich habe einige Probleme. Hier ist ein Ausschnitt. Ich habe mehrere Compilerfehler in der async_accept-Zeile. Was mache ich falsch? :P

Ich habe meinen Code von dieser Seite abgeleitet: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html

Fehler:

Fehler 1 Fehler C2780: 'void boost::asio::basic_socket_acceptor::async_accept(boost::asio::basic_socket &,boost::asio::ip::basic_endpoint &,AcceptHandler)' : erwartet 3 Argumente - 2 bereitgestellt e:\schulencode\senior projekt\cplusplusport\cplusplusport\alexsocket.cpp 36

Fehler 2 Fehler C2784: 'void boost::asio::basic_socket_acceptor::async_accept(boost::asio::basic_socket &,AcceptHandler)' : konnte keinen Vorlagenausdruck für 'boost::asio::basic_socket &' ableiten aus 'boost::asio::ip::tcp::socket *' e:\schulencode\senior projekt\cplusplusport\cplusplusport\alexsocket.cpp 36

bool TestSocket::StartListening(int port)
{
    bool hatGestartet = false;

    if (!this->listening)
    {
        //versuche zuzuhören
        acceptor = new tcp::acceptor(this->myService, tcp::endpoint(tcp::v4(), port));
        didStart = true; //eventuell ändern?
        tcp::socket* tempNewSocket = new tcp::socket(this->myService);
        acceptor->async_accept(tempNewSocket, boost::bind(&TestSocket::NewConnection, this, tempNewSocket, boost::asio::placeholders::error) );
    }
    else //bereits gestartet!
        return false;

    this->listening = hatGestartet;
    return hatGestartet;
}

void TestSocket::NewConnection(tcp::socket* s, const boost::system::error_code& error)
{

}

0 Stimmen

Gib uns mehr Informationen. Du bindest dich an AlexSocket::NewConnection mit this als erstes Argument - aber soweit ich sehen kann, ist this nicht ein AlexSocket - oder doch? Und ist die NewConnection Methode virtuell?

0 Stimmen

Ugh. Ich versuchte, meinen albernen "MyName" Präfix loszuwerden, den ich allen meinen Klassen hinzufüge, wenn ich Lerncode schreibe. :P

0 Stimmen

Ich denke, das erste Argument muss *tempNewSocket sein. Bitte fügen Sie die Fehler hinzu, die Sie erhalten, zu Ihrer Frage hinzu. Ohne das können wir nur erraten, welche Fehler Sie haben.

4voto

Éric Malenfant Punkte 13670

Async_accept erwartet eine Referenz auf den Socket, nicht einen Zeiger, also versuchen Sie es mit

acceptor->async_accept(*tempNewSocket, ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X