Problem mit Abstrakten klassen



  • Hi,

    ich habe damit irgendwie ein problem das ich net kapiere:

    class IRenderBuffer
    {
    public:
        IRenderBuffer (void) {}
        ~IRenderBuffer (void) {}
    
        virtual std::string getPrivateData (void) = 0;
    
    private:
    };
    
    class D3DRenderBuffer
    {
    public:
        D3DRenderBuffer (void) {}
        ~D3DRenderBuffer (void) {}
    
        virtual std::string getPrivateData (void)
        { return ("test"); }
    private:
    };
    
    class IRenderDevice
    {
    public:
        IRenderDevice (void) {}
        ~IRenderDevice (void) {}
    
        virtual void createRenderBuffer (unsigned int size, unsigned long FVF, IRenderBuffer **out) = 0;
    private:
    };
    
    class D3DRenderDevice : public IRenderDevice
    {
    public:
        D3DRenderDevice (void) {}
        ~D3DRenderDevice (void) {}
    
        void createRenderBuffer (unsigned int size, unsigned long FVF, D3DRenderBuffer **out)
        {}
    };
    
    int main (void)
    {
        D3DRenderDevice *device = new D3DRenderDevice;
    }
    

    Ich bekomm diesen Fehler:
    error C2259: 'D3DRenderDevice' : cannot instantiate abstract class

    Aber wieso? Ersetzt die Funktion nicht die virtual funktion?

    Tipps? Ratschläge? (Achja geht um die Effektive kapselung von OpenGL und Direct3D! Also wenn da noch jemand gute Tipps hat HER DAMIT!!!)



  • ganz einfache sache:

    virtual void createRenderBuffer (unsigned int size, unsigned long FVF, IRenderBuffer **out) = 0;
    
    void createRenderBuffer (unsigned int size, unsigned long FVF, D3DRenderBuffer **out)
    

    2 verschiedene signaturen.


Anmelden zum Antworten