2017-02-14 14 views
0

У меня есть эта иерархия, и я пытаюсь создать соединение с IServer. Но он говорит, что объект абстрактного класса не допускается.Объект абстрактного класса не допускается

вот классы и код ошибки прокомментирован.

struct IServerConnection : public CImplRingRefPtr<IServerConnection>, virtual public IRefPtr 
{ 
    virtual IServerData*     CreateData(void) = 0; 
    virtual IServerData*     Request(void) = 0; 
    virtual int        Send(const IServerData *data) = 0; 
}; 


struct ImplWFSConnection : public S3W::IServerConnection 

{ 
private: 
    OGRDataSource *m_wfs_t; 
public: 
    ImplWFSConnection() {} 
    ~ImplWFSConnection() { OGRDataSource::DestroyDataSource(m_wfs_t); } 
    void       Open(const char * url); 
    bool       QueryLayer(const char* layer); 
    int       Write(S3W::IWFSData *data); 
    S3W::CRefPtr<S3W::IWFSData> Read(void); 


}; 




S3W::IServerConnection* ImplMapServer::OpenWFSConnection(const char *url) 
{ 
    if (!m_url) 
    { 
     return nullptr; 
    } 
    else 


    // connection_ptr->Open(m_url); 

    return new ImplWFSConnection(); /error 
} 
+0

Реализовать свои чистые виртуальные функции (= 0) в наследующих классах. – Steeve

+0

Почему вы создаете производный класс в базовом классе? Базовый класс не должен зависеть от производных классов. –

+1

Добро пожаловать в переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –

ответ

3

В IServerConnectionCreateData, Request и Send являются pure virtual методами, которые необходимо реализовать в производном классе до создания экземпляра этого производного класса.

+0

Спасибо большое, что это сработало сейчас –