2016-07-14 14 views
-1

使用可能なサーバーの種類に応じて、複数のサーバーを処理するためにサーバーインターフェイスを使用しようとしています。簡略化され、コードは次のようである:初期化で '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ファイルの代わりに、実際のヘッダが含まれている場合には、奇妙な行動をすることです:

+0

ServerInterface.cppファイルで 'ServerInterface * getServer()'が 'ServerInterface * ServerInterface :: getServer()'になっていませんか?実装ではクラス名を省略したようです。さらに、 'HMDServer * getHMDServerPtr()'は静的ではないと宣言されていますが、静的であるかのように呼び出しています。 **実際のコードを投稿する**。 – WhozCraig

+0

**フル**コードを表示してください。 ServerInterface.cppはどのようにサーバーについて知っていますか? –

+0

あなたの答えは、私の実際のコードで既に実装されていますが、私はちょうどここにそれを含めることを忘れてしまった。サーバーオブジェクトがgetTime()などのオブジェクトの構築自体と関係のない50の異なる関数を見たいのでない限り、コード全体を投稿することはできません。関連する関数はここにあります。 #あなたが指摘した訂正と共に、ファイルとmain.cppを#includeします。 – IntiM

答えて

0

これはあなたのコード内で実際にタイプミスがある場合、または確認が、あなたのServerInterface.cppにはない、次の状態予想された。同じことがmain.cpp

#include "ServerInterface.cpp" 

の場合も同様です。

関連する問題