已删除的函数“虚拟类名::~类名”覆盖未删除的函数 VIRTUAL DESTRUCTOR

问题描述

我试图在这段代码中找到问题,它不能在 C++14 中编译。

最初的问题是使这个编译“不编辑对象或修改 drawObject() 的原型”:

#include <iostream>

class Object {
    virtual ~Object() {}
};

class Line : public Object {
public:
    virtual void draw() {std::cout << "draw" << std::endl;}
    ...
};

void drawObject(Object * obj) {
    obj->draw();
}

int main() {
    Line line;
    drawObject(&line);
}

所以我将 obj 强制转换为 Line,然后在 Object 的析构函数中遇到了另一个问题,因为它是私有的。

我想我需要定义 Line 类的析构函数,但没有这样做。

另外,我不允许编辑 Object 类(显然...)和 drawObject() 的原型。

#include <iostream>

class Object {
    virtual ~Object() {}
};

class Line : public Object {
public:
    virtual void draw() {std::cout << "draw" << std::endl;}
};

void drawObject(Object *obj) {
    ((Line*)obj)->draw();
}

int main() {
    Line line ;
    drawObject(&line);
}

我得到的错误:

     error: deleted function 'virtual Line::~Line()' overriding non-deleted function

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)