抽象类的虚析构函数是模糊的
Virtual destructor of abstract class fix is fuzzy
我有一个抽象类,当我试图删除该类的实例时,我得到一些错误。
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;
当我替换以下定义时,我得到它与clang++
编译:
#include <vector>
class CCobjectBase
{
public:
CCobjectBase() {};
virtual ~CCobjectBase() {};
virtual void createPainterPath() = 0;
};
class CTriangle : public CCobjectBase
{
public:
CTriangle();
~CTriangle();
void createPainterPath();
};
CTriangle::CTriangle() {}
CTriangle::~CTriangle() {}
void CTriangle::createPainterPath() {}
int main() {
std::vector<CCobjectBase *> m_objectBaseList;
m_objectBaseList.push_back(new CTriangle());
//do stuff with m_objectBaseList
int index = 0;
delete m_objectBaseList.at(index);
m_objectBaseList.erase(m_objectBaseList.begin() + index);
}
如果不适合您,请提供更多信息
相关文章:
- 无法创建抽象类的实例
- 用pybind11包装C++抽象类时出错
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 抽象类错误,请参阅声明" "是抽象的
- 将自定义函数传递到基抽象类中以延迟执行
- 将包含抽象类和普通类C++包导出到 Python
- C++:处理抽象类中的错误时出现问题
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 在 C++ 中使用另一个头文件中的抽象类
- ATL::CComContainedObject<contained>: C2259 无法实例化抽象类
- C++:从抽象类重写纯虚拟运算符重载
- 如何创建shared_ptr抽象类的容器
- .h 或.cpp文件中的抽象类或两者兼而有之?
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- E0322:不允许使用抽象类类型 " " 的对象
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 提升 - 类没有名为"序列化"的成员(抽象类)?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 抽象类的虚析构函数是模糊的