也许我太野心勃勃了,但我正试图编写一个服务器程序,它可以同时接受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();
}问题是,这不会编译,从而产生一个错误:
'CalculationServer::CalculationServer(QIODevice *,QObject *):无法将参数1从“QLocalSocket*”转换为指向不相关的“QIODevice*”1>类型;转换需要reinterpret_cast、C风格的强制转换或函数式的转换
现在指出的类型显然不是不相关的,在我的代码的其他地方,我的操作完全没有问题,比如:
QLocalSocket *socket = new QLocalSocket;
QIODevice *server = new QIODevice;
server = socket;..。那么,有人能告诉我为什么编译器对此有问题吗?有办法让构造函数接受QLocalServer*吗?我想有一个核心选项,就是让构造函数使用一个空指针加上一个额外的变量来告诉它它正在发送什么,这样它就可以重新构造指向一个QLocalSocket或QTcpSocket的空指针,但是我很不舒服地求助于reinterpret_cast,因为它看起来应该是一个简单的C++多态性。
致以敬意,
斯蒂芬。
发布于 2011-01-07 03:26:38
最可能的原因是您忘记了错误发生的源文件中的#include <QLocalSocket>。
https://stackoverflow.com/questions/4621512
复制相似问题