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.

War es hilfreich?

Lösung

Der wahrscheinlichste Grund ist, dass Sie #include <QLocalSocket> in der Quelldatei vergessen haben, wo der Fehler auftritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top