@sounddiibo

Как исправить ошибки use of deleted functions QT 5.12?

Пишу клиент-серверное приложение, на этапе написания сервера возникли проблемы с функциями. Не понимаю из за чего может быть проблема

Код программы:
server.h:
#ifndef SERVER_H
#define SERVER_H

#include <QTcpServer>
#include <QTcpSocket>
#include <QVector>
#include <QByteArray>

class Server : public QTcpServer {
Q_OBJECT

public:
    Server();
    QTcpSocket *socket = nullptr;

private:
    QVector<QTcpSocket> sockets;
    QByteArray data = nullptr;
    void sendToClient(QString text);

public slots:
    void incomingConnection(qintptr socketDescriptor);
    void slotReadyRead();
};

#endif // SERVER_H


server.cpp:
#include "server.h"

#include <QDataStream>

Server::Server() {
    if(this->listen(QHostAddress::Any, 2323)) {
        qDebug() << "Server started";
    } else {
        qDebug() << "Server starting error";
    }
}

void Server::incomingConnection(qintptr handle) {
    socket = new QTcpSocket;
    socket->setSocketDescriptor(handle);
    connect(socket, &QTcpSocket::readyRead, this, &Server::slotReadyRead);
    connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);

    sockets.push_back(*socket);
    qDebug() << "Client connected";
}

void Server::slotReadyRead() {
    socket = (QTcpSocket*) sender();
    QDataStream in_socket(socket);
    in_socket.setVersion(QDataStream::Qt_5_12);

    if(in_socket.status() == QDataStream::Ok) {
        qDebug() << "Reading...";
        QString text = nullptr;
        in_socket >> text;
        qDebug() << text;
    } else {
        qDebug() << "Datastream error";
    }
}

void Server::sendToClient(QString text) {
    data.clear();
    QDataStream out_socket(&data, QIODevice::WriteOnly);
    out_socket.setVersion(QDataStream::Qt_5_12);
    out_socket << text;
    socket->write(data);
}


main.cpp:
#include <QCoreApplication>
#include "server.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Server server;
    return a.exec();
}


62684c9d69a03452049199.jpeg
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Не понимаю из за чего может быть проблема

вот из-за этого:
sockets.push_back(*socket);
в сообщениях об ошибке написано, что QTcpSocket нельзя копировать, а здесь ты делаешь именно это. Храни какие-нибудь умные указатели в векторе sockets вместо объектов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы