Есть такой класс:
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
Как быть? Как передать в метод структуру?
tcp::socket не получится скопировать.
Его можно либо перемещать (возможно с помощью std::move), либо передавать по ссылке.
Мне кажется, здесь вам нужна именно передача по ссылке: void onDataRec(Client &sender) и т. д.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей