2016-07-14 5 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 근본적으로, 서버 파일을 추가하기 전에 HMDServer 만 포함되었으므로 완벽하게 작동했습니다. 나는 무엇을 잘못 했는가?

#include "HMDServer.cpp" 
#include "Server.cpp" 

당신이 진정으로 .cpp 파일 대신 실제 헤더를 포함하는 경우가 이상한 행동을하는 것입니다 :

+0

ServerInterface.cpp 파일에서'ServerInterface * getServer()'가'ServerInterface * ServerInterface :: getServer()'가 아닌가? 당신은 당신의 구현에 클래스 이름을 빠뜨린 것 같다. 게다가,'HMDServer * getHMDServerPtr()'은 비 정적으로 선언되지만 정적 인 것처럼 당신을 호출하고 구현은 당신의 포스트에서 완전히 빠져있다. ** 실제 코드 게시 **. – WhozCraig

+0

** 전체 ** 코드를 표시하십시오. ServerInterface.cpp는 서버에 대해 어떻게 알고 있습니까? –

+0

답변을 주신 WhozCraig에게 감사드립니다. 실제 코드에서 이미 구현되었으므로 여기에 포함하는 것을 잊어 버렸습니다. 서버 객체가 getTime() 등과 같은 객체의 생성 자체와 관련이없는 50 가지 다른 함수를보고 싶지 않으면 전체 코드를 게시 할 수 없습니다. 관련 함수가 여기에 추가되었습니다. #include files and main.cpp 당신이 지적한 수정 내용과 함께. – IntiM

답변

0

이 코드에서 실제로 오타 또는 확실하지만 ServerInterface.cpp에하지, 다음과 같은 상태 기대된다. 동일은 당신의 main.cpp

#include "ServerInterface.cpp" 

을 위해 보유하고 있습니다.

관련 문제