初始化时无法将"对象*"转换为"抽象*"
Cannot convert 'object*' to 'abstract*' in initialization
我正在尝试使用服务器接口来处理多个服务器,具体取决于哪个服务器可用。简化,代码是这样的:
服务器.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
.
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 从子类到具有相同基数的抽象子类的隐式转换
- 从抽象类向下转换到右侧模板的最佳方式
- 指向抽象基类的指针需要一些强制转换吗?C++
- 类型转换到抽象类
- 将派生类成员函数的指针强制转换为抽象成员函数的指针
- 伺服转换应该具有什么抽象级别
- 动态向下转换为抽象类(C++)
- 初始化时无法将"对象*"转换为"抽象*"
- 转换基指针时出错:“不能实例化抽象类”
- 编写一个抽象函数可以将整数转换为字符串
- 模板、多态、抽象基类指针和运行时类型转换