无法分配抽象类型'Rectangle'的对象

时间:2014-06-19 12:14:59

标签: c++ codeblocks

我有2个班级:

Forme.h

class Forme
{
private:
    string _nom;

protected:
    Forme(string nom){nom = _nom;}
    ~Forme();


    virtual string ToString()const = 0;
};

Rectangle.h

class Rectangle : public Forme
{
private :
    int _x;
    int _y;
    unsigned int _largeur;
    unsigned int _hauteur;
public :
    Rectangle() : _x(0) , _y(0) , _largeur(0) , _hauteur(0) , Forme("") {};
    Rectangle(int x, int y, int largeur, int hauteur, string nom): _x(x) , _y(y) , _largeur(largeur) , _hauteur(hauteur) , Forme(nom) {}
    Rectangle(const Rectangle& rectangle) : Forme(""){/*nothing wroten yet */};
    virtual ~Rectangle() {}


    virtual string toString() const {return "test";}
};

main.cpp:

Rectangle* r = new Rectangle(0,0,5,5,"test");

但是当我编译这段代码时,我得到了这个错误:

  

main.cpp |错误:无法分配抽象类型'Rectangle'的对象

有人能解释我为什么会收到此错误吗?我不知道为什么我得到这个错误,因为在Rectangle.h中定义了toString(),我没有在Rectangle.cpp和Forme.cpp中写任何东西。

谢谢。

(抱歉我的英语水平不好,我是法国人)

1 个答案:

答案 0 :(得分:2)

这是一个错字:

基类

class Forme
{
    virtual string ToString()const = 0;
};

派生类

class Rectangle : public Forme {
    virtual string toString() const {return "test";}
}

此外:

~Forme();

这没有定义。用{}修复它,并可能将其标记为虚拟。