Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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