Есть такой класс:
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)
и т. д.
Виртуальный выделенный сервер (VDS) становится отличным выбором
В COM порт поступают данные вида 0,0,999,000000110: , получив строку ее надо привести к виду 0,0,999,0,0,0,0,0,0,1,1,0
Найти сумму под и над главной диагональю ПРИМЕР 1 2 3 4 5 6 7 8 9 над ней будет 2+3+6=11 - правильно, а под 4+7+8=19 , а выдает 15 (7+8) Вот код:`
Есть шаблонная функция, принимающая аргумент произвольного типаХочется сделать специализацию этой функции для строк, но при этом строку...