不允许抽象类的对象

Object of abstract class is not allowed

本文关键字:对象 抽象类 不允许      更新时间:2023-10-16

我有这个层次结构,我正在尝试创建一个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
} 

IServerConnection CreateData中,RequestSend 是纯虚方法,在创建派生类的实例之前,必须在派生类中实现这些方法。