Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
我有一个抽象类,尝试删除该类的实例时遇到一些错误。
我创建以下对象:
我在
更新:
这有点愚蠢,但是我尝试运行qmake->全部重建,但是什么也没有发生,但是当我重新启动应用程序时,没有显示任何错误或警告。为什么现在可以使用?我不知道。
未定义。它已声明,但您未提供定义。
使用C ++ 11,您可以将声明更改为
一个空的定义。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
我有一个抽象类,尝试删除该类的实例时遇到一些错误。
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;
一个空的定义。
10-07 15:05