2017-02-14 70 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

欢迎来到Stack Overflow。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

回答

3

IServerConnectionCreateDataRequestSendpure virtual方法,你必须在你的派生类中创建一个派生类的实例之前执行。

+0

非常感谢它现在的工作 –

相关问题