2011-01-07 4 views
0

おそらく私は過度に野心的ですが、QLocalSocketsとQTcpSocketの両方で接続を受け入れることができるサーバープログラムを作成しようとしています。コンセプトはQLocalServerとQTcpServerの両方が新しい接続をリッスンして「ネクサス」オブジェクトを持つことです。コンストラクタのQIODeviceへのポインタを取るサーバーオブジェクトを、確立QIODeviceを期待するメソッドにQLocalSocket *を渡す*

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); 
    } 

...そして、別のスロット。理論的には、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(); 
} 

問題がエラーを与え、これはコンパイルされないということです。今のタイプがはっきりない無関係です指し示さ

error C2664: 'CalculationServer::CalculationServer(QIODevice *,QObject *)' : cannot convert parameter 1 from 'QLocalSocket *' to 'QIODevice *' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

、および他の場所で私のコードで私のようなアクションで全く問題ありません:

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

server = socket; 

...ので、コンパイラはトンに問題があり、なぜ誰も私を伝えることができます彼の?コンストラクタがQLocalServer *を受け入れるようにする方法はありますか?コンストラクタにvoidポインタと追加の変数を渡して送信することを指示する核オプションがあると仮定して、QLocalSocketまたはQTcpSocketのいずれかのvoidポインタを再作成することができますが、reinterpret_cast C++多形の単純なビットでなければならないように見えます。

ありがとう、

スティーブン。

答えて

1

エラーが発生したソースファイルで#include <QLocalSocket>を忘れている可能性が最も高いです。

+0

グッドネス私、はい、それはそれを修正します。ありがとうございました。私はそれがqlocalserver.hで参照されていると仮定したと思いますが、明らかにそうではありません。 –

関連する問題