使用可能なサーバーの種類に応じて、複数のサーバーを処理するためにサーバーインターフェイスを使用しようとしています。簡略化され、コードは次のようである:初期化で 'object *'を 'abstract *'に変換できません
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;
}
私はこのコードを実行すると、それは(単にgetServer内部に入る)の場合は機能とServerクラスからポインタを取得しようとすると、次のエラーメッセージが表示されます。 cannot convert 'Server*' to 'ServerInterface*' in initialization.
Pre私がServerファイルを追加する前に、HMDServerだけが含まれていたのは間違いなく機能していました。私は何を間違えたのですか?
#include "HMDServer.cpp"
#include "Server.cpp"
あなたが本当に.cpp
ファイルの代わりに、実際のヘッダが含まれている場合には、奇妙な行動をすることです:
ServerInterface.cppファイルで 'ServerInterface * getServer()'が 'ServerInterface * ServerInterface :: getServer()'になっていませんか?実装ではクラス名を省略したようです。さらに、 'HMDServer * getHMDServerPtr()'は静的ではないと宣言されていますが、静的であるかのように呼び出しています。 **実際のコードを投稿する**。 – WhozCraig
**フル**コードを表示してください。 ServerInterface.cppはどのようにサーバーについて知っていますか? –
あなたの答えは、私の実際のコードで既に実装されていますが、私はちょうどここにそれを含めることを忘れてしまった。サーバーオブジェクトがgetTime()などのオブジェクトの構築自体と関係のない50の異なる関数を見たいのでない限り、コード全体を投稿することはできません。関連する関数はここにあります。 #あなたが指摘した訂正と共に、ファイルとmain.cppを#includeします。 – IntiM