Ошибка передачи структуры в метод

132
28 июня 2019, 06:10

Есть такой класс:

SocketManager.h
struct Client {
    int ID;
    char DATA[1024];
    tcp::socket CLIENT_SOCKET;
};
class Manager {
public:
    void AddConnectionListener(void(*ConnectListener)(Client));
    void AddDataRecListener(void(*DataListener)(Client));
    void onDataRec(Client sender);
    void onConnect(Client connector);
    void SendDataTo(Client);
private:
    void(*ConnListener)(Client);
    void(*DataReceiveListeer)(Client);
};

И его реализация:

SocketManager.cpp

void Manager::AddConnectionListener(void(*ConnectListener)(Client)) {
    ConnListener = ConnectListener;
}
void Manager::AddDataRecListener(void(*DataListener)(Client)) {
    DataReceiveListeer = DataListener;
}
void Manager::onDataRec(Client sender) {
}
void Manager::onConnect(Client connector) {
    ConnListener(connector); // ошибка
}

При попытке вызова функции по её указателю возникает ошибка:

function "Client::Client(const Client &)" (declared implicitly) cannot be referenced -- it is a deleted function boost_server D:\C++ Projects\boost_server\boost_server\SocketManager.cpp

Как быть? Как передать в метод структуру?

Answer 1

tcp::socket не получится скопировать.

Его можно либо перемещать (возможно с помощью std::move), либо передавать по ссылке.

Мне кажется, здесь вам нужна именно передача по ссылке: void onDataRec(Client &sender) и т. д.

READ ALSO
Как правильно передать данные из COM порта

Как правильно передать данные из COM порта

В COM порт поступают данные вида 0,0,999,000000110: , получив строку ее надо привести к виду 0,0,999,0,0,0,0,0,0,1,1,0

95
Ошибка в с++ программа

Ошибка в с++ программа

Найти сумму под и над главной диагональю ПРИМЕР 1 2 3 4 5 6 7 8 9 над ней будет 2+3+6=11 - правильно, а под 4+7+8=19 , а выдает 15 (7+8) Вот код:`

120
Как использовать Qt в C++ без QtCreator?

Как использовать Qt в C++ без QtCreator?

Как я могу использовать Qt без QtCreator?

96
Специализация шаблонной функции для std::string

Специализация шаблонной функции для std::string

Есть шаблонная функция, принимающая аргумент произвольного типаХочется сделать специализацию этой функции для строк, но при этом строку...

112