I am trying to use a server interface to handle multiple servers depending on which one is available. Simplified, the code is like this:
Server.h
class Server : public ServerInterface {
public:
Server();
static Server * getServerPtr();
}
Server.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
}
ServerInterface.h
class ServerInterface {
public:
static ServerInterface * getServer();
}
ServerInterface.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;
}
main.cpp
#include "ServerInterface.cpp"
int main() {
ServerInterface * server = ServerInterface::getServer();
return 0;
}
When I run this code, it goes inside getServer()'s if function and when it tries to get a pointer from the Server class I receive an error saying:
cannot convert 'Server*' to 'ServerInterface*' in initialization.
Previously, before I added the Server files and only HMDServer was included, it worked flawlessly. What did I do wrong?