初始化时无法将"对象*"转换为"抽象*"

Cannot convert 'object*' to 'abstract*' in initialization

本文关键字:转换 抽象 对象 初始化      更新时间:2023-10-16

我正在尝试使用服务器接口来处理多个服务器,具体取决于哪个服务器可用。简化,代码是这样的:

服务器.h

class Server : public ServerInterface {
public:
    Server();
    static Server * getServerPtr();
}

服务器.cpp

#include "Server.h"
Server::Server () {}
Server * Server::getServerPtr() {
    Server * server = new Server();
    return server;
}

HMDServer.h

class HMDServer : public ServerInterface {
public:
    HMDServer();
    static HMDServer * getHMDServerPtr();
    void init();
private:
    int server_type;

HMDServer.cpp

#include "HMDServer.h"
HMDServer::HMDServer() {
    server_type = 1;
    init();
}
HMDServer * HMDServer::returnHMDServerPtr() {
    HMDServer * server = new HMDServer();
    return server;
}
void HMDServer::init() {
    //try to initialize server
    server_type = 111; // if initialization successful
}

服务器接口.h

class ServerInterface {
public:
    static ServerInterface * getServer();
}

服务器接口.cpp

#include "ServerInterface.h"
#include "HMDServer.cpp"
#include "Server.cpp"
ServerInterface * ServerInterface::getServer() {
    ServerInterface * server1 = HMDServer::getHMDServerPtr(); //This works perfectly
    if(server1->getServerType() == 1) {
        ServerInterface * server2 = Server::getServerPtr();
        return server2;
    } else
        return server1;
}

主.cpp

#include "ServerInterface.cpp"
int main() {
    ServerInterface * server = ServerInterface::getServer();
    return 0;
}

当我运行此代码时,它会进入getServer()的if函数,当它尝试从服务器类获取指针时,我收到一条错误消息: cannot convert 'Server*' to 'ServerInterface*' in initialization.以前,在我添加服务器文件并且只包含HMDServer之前,它完美地工作。我做错了什么?

不确定这是拼写错误还是实际上在您的代码中,但是在您的ServerInterface.cpp中,您陈述以下内容:

#include "HMDServer.cpp"
#include "Server.cpp"

如果您真正包含.cpp文件而不是实际的标头,则会出现奇怪的行为。这同样适用于

#include "ServerInterface.cpp"

在你的main.cpp.