تمرير qlocalsocket* إلى طريقة تتوقع Qiodevice*
-
30-09-2019 - |
سؤال
ربما أكون أكثر طموحًا ، لكنني أحاول كتابة برنامج خادم يمكنه قبول الاتصالات على كل من 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>
في الملف المصدر حيث يحدث الخطأ.