c++ - 抽象类修复的虚析构函数是模糊的

标签 c++ qt

<分区>

我有一个抽象类,当我尝试删除该类的实例时出现一些错误。

class CCobjectBase
{
public:
    CCobjectBase();
    virtual ~CCobjectBase();

    virtual void createPainterPath() = 0;
};

class CTriangle : public CCobjectBase
{
public:
    CTriangle();
    ~CTriangle();
    void createPainterPath();
  };

CCobjectBase :: ~CCobjectBase(){}

我创建对象如下:

std::vector<CCobjectBase *> m_objectBaseList;

m_objectBaseList.push_back(new CTriangle());

//do stuff with m_objectBaseList

delete m_objectBaseList.at(index);
m_objectBaseList.erase(m_objectBaseList.begin() + index);

我在 ~CTriangle()“未定义对 CCobjectBase::~CCobjectBase()”的引用中检索到错误。如果我从 CCobjectBase 中删除虚拟析构函数,我会收到警告“删除具有非虚拟析构函数的抽象类类型 CCobjectBase 的对象将导致未定义的行为”,这确实很烦人,但修复会导致更多问题。

更新: 这有点愚蠢,但我尝试运行 qmake -> 全部重建但没有任何反应,但是当我重新启动应用程序时,没有显示任何错误或警告。为什么现在有效?我不知道。

最佳答案

你的方法

virtual ~CCobjectBase();

未定义。它已声明,但您没有提供定义。 使用 C++11,您可以将声明更改为

virtual ~CCobjectBase() = default;

对于空定义。

关于c++ - 抽象类修复的虚析构函数是模糊的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824087/

相关文章:

c++ - QCompare 测试失败 : wrong number of arguments produced by the [] operator on an unorded_map

c++ - 如何在VTK中显示鼠标光标附近的标签

c++ - 是否可以让现有的 C++ 代码与 Qt 一起工作?

c++ - QT 中的 64 位 int Spin Box

C++ 定义的 16 位(高)颜色

qt - QLabel 自动换行模式

c++ - int 指针数组

c++ - 使用方法指针启动线程

c++ - 从两个 map 创建一个 set_difference vector

c++ - 无法使用 dyn.load windows 7 64bit 在 R 中加载 dll 文件