سؤال

ربما أكون أكثر طموحًا ، لكنني أحاول كتابة برنامج خادم يمكنه قبول الاتصالات على كل من Qlocalsockets و QTCpsockets. المفهوم هو أن يكون لديك كائن "Nexus" مع كل من Qlocalserver و QTCpserver الاستماع إلى اتصالات جديدة:

    Nexus::Nexus(QObject *parent)
        : QObject(parent)
    {
        // Establish a QLocalServer to deal with local connection requests:
        localServer = new QLocalServer;

        connect(localServer, SIGNAL(newConnection()),
                this,        SLOT(newLocalConnection()));
        localServer -> listen("CalculationServer");


        // Establish a UDP socket to deal with discovery requests:
        udpServer = new QUdpSocket(this);
        udpServer -> bind(QHostAddress::Any, SERVER_DISCOVERY_PORT);
        connect(udpServer, SIGNAL(readyRead()),
                this,      SLOT(beDiscovered()));

        // Establish a QTcpServer to deal with remote connection requests:
        tcpServer = new QTcpServer;

        connect(tcpServer, SIGNAL(newConnection()),
                this,      SLOT(newTcpConnection()));
        tcpServer -> listen(QHostAddress::Any, SERVER_COMMAND_PORT);
    }

... ثم فصل فتحات تنشئ كائن الخادم ، الذي يأخذ مُنشئه مؤشرًا إلى qiodevice. من الناحية النظرية ، هذا ينبغي للعمل لأن كل من Qlocalsocket و qtcpsocket يرثون qiodevice. فيما يلي فتحة NewLocalConnection ، على سبيل المثال:

void Nexus::newLocalConnection()
{
    // Create a new CalculationServer connected to the newly-created local socket:
    serverList.append(new CalculationServer(localServer -> nextPendingConnection()));

    // We don't allow more than one local connection, so stop listening on the server:
    localServer -> close();
}

المشكلة هي أن هذا لن يجمع ، مع إعطاء خطأ:

خطأ C2664: "حساب calculationServer :: calcinationServer (qiodevice *، qobject *) ': لا يمكن تحويل المعلمة 1 من" qlocalsocket *"إلى" qiodevice *' 1> الأنواع المذكورة إليها ؛ يتطلب التحويل reinterpret_cast أو فريق الممثلين على طراز C

الآن الأنواع المشار إليها بوضوح ليس لا علاقة لها ، وفي أي مكان آخر في الكود الخاص بي ، ليس لدي أي مشاكل على الإطلاق مع إجراءات مثل:

QLocalSocket *socket = new QLocalSocket;
QIODevice    *server = new QIODevice;

server = socket;

... هل يمكن لأي شخص أن يخبرني لماذا يواجه المترجم مشكلة في هذا؟ هل هناك طريقة يمكنني من خلالها جعل المنشئ يقبل Qlocalserver*؟ أفترض أن هناك الخيار النووي لجعل المُنشئ يأخذ مؤشرًا باطلاً بالإضافة إلى متغير إضافي لإخباره بما يتم إرساله ، لذلك يمكنه إعادة صياغة مؤشر الفراغ إلى Qlocalsocket أو QTCPSOCKE على ما يبدو أنه يجب أن يكون جزءًا مباشرًا من الأشكال المتعددة C ++.

يعتبر،

ستيفن.

هل كانت مفيدة؟

المحلول

السبب الأكثر ترجيحًا هو أنك نسيت ذلك #include <QLocalSocket> في الملف المصدر حيث يحدث الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top