ASIO Attempting to reference a deleted function

Viewed 1201

I have the following error:

Error   C2280   'Sender::Sender(const Sender &)': attempting to reference a deleted function

This is my code:

#pragma once

#include <iostream>
#include <string>
#include "asio.hpp"

using namespace asio;

class Sender
{
    public:
        Sender(io_service& io_service, 
               const std::string& host, 
               const std::string& port) :
                    io_service_(io_service), 
                    socket_(io_service, ip::udp::endpoint(ip::udp::v4(), 0)) 
        {
            ip::udp::resolver resolver(io_service_);
            ip::udp::resolver::query query(ip::udp::v4(), host, port);
            ip::udp::resolver::iterator iter = resolver.resolve(query);
            endpoint_ = *iter;
        };

        ~Sender() 
        {
            socket_.close();
        };

        void operator()() 
        {
            std::string msg = "";
            for (;;) 
            {
                std::cout << "Message: ";
                std::cin >> msg;
                std::cout << "The value you entered is " << msg << std::endl;
            }
        }

    private:
        io_service& io_service_;
        ip::udp::socket socket_;
        ip::udp::endpoint endpoint_;

};

And I'm calling it like this:

io_service io_service;

Sender s{ io_service, "localhost", "1337" };
std::thread sender_thread{ s };    
sender_thread.join();

I know that it's because one of the private members can't be copied, but I can't figure out how to fix it! I don't want to implement a copy constructor.

1 Answers
Related