Ich habe gerade CLion heute auf meiner neuen Linux-Umgebung installiert und ich beschloss, einen einfachen Socket-Server zu machen. Ich möchte schließlich einen Socket-Server in C++ erstellen (weil ich schon Tonnen in C# gemacht habe, Java, Python, PHP, Node.js ...).C++ Boost ASIO-Socket-Fehler
Ich habe den folgenden Code:
//
// Created by josh on 10-10-16.
//
#ifndef RANDOMPROGRAM_TEST_H
#define RANDOMPROGRAM_TEST_H
#include <iostream>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
using namespace boost::asio::ip;
class test {
private:
boost::asio::io_service io_service;
tcp::acceptor acceptor;
tcp::socket socket;
test() {
this->acceptor = tcp::acceptor(this->io_service, tcp::endpoint(tcp::v4(), 30000));
this->socket = tcp::socket(io_service);
acceptor.async_accept(this->socket, boost::bind(&this->handle_accept, this, this->socket, NULL));
}
void handle_accept(tcp::socket* client, const boost::system::error_code& error) {
}
};
#endif //RANDOMPROGRAM_TEST_H
In meiner Haupt-CPP-Datei (die, wenn sie aufgerufen wird das Programm ausgeführt wird):
#include "test.h"
int main() {
test t();
return 0;
}
Schließlich mein CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(Randomshitprogram)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(Boost 1.62.0 COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)
message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
message(STATUS "Boost_VERSION: ${Boost_VERSION}")
include_directories(${Boost_INCLUDE_DIRS})
endif()
set(SOURCE_FILES main.cpp test.h)
add_executable(Randomshitprogram ${SOURCE_FILES})
Jetzt, wenn ich versuche, das Programm auszuführen, gibt es den folgenden Fehler, zusammen mit möglicherweise eine Tonne von Fehlern:
No matching function for call to ‘boost::asio::basic_socket_acceptor<boost::asio::ip::tcp>::basic_socket_acceptor()’
Das Protokoll:
Es behebt den Fehler aber noch habe ich einige Fehler mehr. Eine, die ich sehe, ist: Fehler: Verwendung der gelöschten Funktion 'boost :: asio :: basic_stream_socket :: basic_stream_socket (const boost :: asio :: basic_stream_socket &) ' acceptor.async_accept (this-> socket, boost :: bind (& test :: handle_accept, dies, dies-> socket, boost :: asio :: placeholders :: error)); –
Sieht so aus, als ob der Socket nicht kopierbar ist und Sie ihn als drittes Argument von 'bind' übergeben. Sie müssen wirklich lernen, diese Fehler zu lesen: Der erste Teil, den Sie eingefügt haben, ist die Standardsignatur eines Kopierkonstruktors. – Useless