Ich versuche, eine Server-Schnittstelle zu verwenden, um mehrere Server abhängig davon zu verwalten, welche verfügbar ist. Vereinfacht ist der Code wie folgt aus:Kann 'Objekt *' nicht in 'Zusammenfassung *' in der Initialisierung konvertieren
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;
}
Wenn ich diesen Code ausführen, geht es im Inneren GetServer() 's, wenn die Funktion und Wenn es versucht, einen Zeiger von der Server-Klasse zu erhalten, erhalte ich eine Fehlermeldung: cannot convert 'Server*' to 'ServerInterface*' in initialization.
Pre Bevor ich die Server-Dateien hinzugefügt habe und nur HMDServer enthalten war, funktionierte es einwandfrei. Was habe ich falsch gemacht?
Ist nicht 'ServerInterface * getServer()' in Ihrer Datei ServerInterface.cpp 'ServerInterface * ServerInterface :: getServer()'? Sie scheinen den Klassennamen in Ihrer Implementierung weggelassen zu haben. Darüber hinaus wird 'HMDServer * getHMDServerPtr()' als nicht statisch deklariert, dennoch rufen Sie es auf, als wäre es statisch und die Implementierung fehlt vollständig in Ihrem Post. ** Post echten Code **. – WhozCraig
Bitte ** ** vollständigen ** Code anzeigen. Wie kennt ServerInterface.cpp Server? –
Danke WhozCraig für deine Antwort, das war schon in meinem eigentlichen Code implementiert, ich habe nur vergessen, es hier aufzunehmen. Ich kann den gesamten Code nicht veröffentlichen, es sei denn, Sie möchten 50 verschiedene Funktionen betrachten, die die Server-Objekte tun, die für die Konstruktion des Objekts irrelevant sind, wie getTime() usw. Die relevanten Funktionen sind hier und ich habe hinzugefügt #include Dateien und main.cpp zusammen mit den Korrekturen, auf die Sie hingewiesen haben. – IntiM