Vorbei an einer QLocalSocket * ein Verfahren ein QIODevice erwartet *
-
30-09-2019 - |
Frage
Vielleicht zu ehrgeizig ich bin, aber ich bin versucht, ein Server-Programm zu schreiben, die beide Verbindungen über QLocalSockets und QTcpSockets annehmen kann. Das Konzept ist ein ‚Verknüpfung‘ mit sowohl für neue Verbindungen eines QLocalServer und QTcpServer Zuhören Objekt haben:
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);
}
... und dann getrennte Schlitze, die ein Server-Objekt aufzubauen, das Konstruktor einen Zeiger auf eine QIODevice. In der Theorie dieser sollte zu arbeiten, weil beide QLocalSocket und QTcpSocket erben QIODevice. Hier ist der newLocalConnection Schlitz, zum Beispiel:
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();
}
Das Problem ist, dass dies nicht kompilieren, einen Fehler geben:
Fehler C2664: ‚CalculationServer :: CalculationServer (QIODevice *, QObject *): QLocalSocket‘kann nicht Parameter 1 von konvertieren '*' zu 'QIODevice *' 1> Typen spitze zu keinem Zusammenhang sind; Konvertierung erfordert reinterpret_cast, C-Casts oder Funktion-Casts
Nun wiesen die Typen sind eindeutig auf nicht in keinen Zusammenhang, und an anderer Stelle in meinem Code habe ich keine Probleme überhaupt mit Aktionen wie:
QLocalSocket *socket = new QLocalSocket;
QIODevice *server = new QIODevice;
server = socket;
... so kann mir jemand sagen, warum der Compiler ein Problem damit hat? Gibt es eine Möglichkeit, dass ich den Konstruktor akzeptiert die QLocalServer * machen kann? Ich nehme an, es die nukleare Option ist der Konstruktor, sich einen void-Zeiger und eine zusätzliche Variable zu nehmen, es zu sagen, was es gesendet wird sein, so dass er dann den void-Zeiger entweder auf einen QLocalSocket oder QTcpSocket neu gefasst, aber ich fühle mich unwohl Umsortierung zu reinterpret_cast auf das, was aussieht wie sollte es eine einfache Bit von C ++ Polymorphismus sein.
Grüße,
Stephen.
Lösung
Der wahrscheinlichste Grund ist, dass Sie #include <QLocalSocket>
in der Quelldatei vergessen haben, wo der Fehler auftritt.