首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QLocalSocket*传递给期望QIODevice的方法*

将QLocalSocket*传递给期望QIODevice的方法*
EN

Stack Overflow用户
提问于 2011-01-07 00:40:57
回答 1查看 1.1K关注 0票数 0

也许我太野心勃勃了,但我正试图编写一个服务器程序,它可以同时接受QLocalSockets和QTcpSockets上的连接。其概念是有一个“nexus”对象,同时有一个QLocalServer和QTcpServer监听新的连接:

代码语言:javascript
复制
    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插槽,例如:

代码语言:javascript
复制
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();
}

问题是,这不会编译,从而产生一个错误:

'CalculationServer::CalculationServer(QIODevice *,QObject *):无法将参数1从“QLocalSocket*”转换为指向不相关的“QIODevice*”1>类型;转换需要reinterpret_cast、C风格的强制转换或函数式的转换

现在指出的类型显然不是不相关的,在我的代码的其他地方,我的操作完全没有问题,比如:

代码语言:javascript
复制
QLocalSocket *socket = new QLocalSocket;
QIODevice    *server = new QIODevice;

server = socket;

..。那么,有人能告诉我为什么编译器对此有问题吗?有办法让构造函数接受QLocalServer*吗?我想有一个核心选项,就是让构造函数使用一个空指针加上一个额外的变量来告诉它它正在发送什么,这样它就可以重新构造指向一个QLocalSocket或QTcpSocket的空指针,但是我很不舒服地求助于reinterpret_cast,因为它看起来应该是一个简单的C++多态性。

致以敬意,

斯蒂芬。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-07 03:26:38

最可能的原因是您忘记了错误发生的源文件中的#include <QLocalSocket>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4621512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档