如何解决未定义的引用错误消息 [英] how to solve undefined reference error message

查看:680
本文介绍了如何解决未定义的引用错误消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这段代码中有一个非常讨厌的问题

Hi, I have a very annoying problem in this code

class Drawable
{
public :
    virtual void draw() = 0;
    virtual ~Drawable() = 0;
};

class MyDrawable : public Drawable
{
public :
    virtual void draw();
    MyDrawable();
    virtual ~MyDrawable();
private :
    int * data;
};

MyDrawable::~MyDrawable()
{
    delete data;
}

void MyDrawable::draw()
{

}

MyDrawable::MyDrawable()
{
    data = new int;
}

void del(Drawable* drawable)
{
    delete drawable;
}

int main()
{
    del(new MyDrawable());
}



错误信息是:

第18行:对Drawable ::〜Drawable()的未定义引用

第28行:对Drawable的未定义引用::〜Drawable()



你能帮帮我PLZ吗?



谢谢,Samuel。


the error messages are :
line 18 : Undefined reference to Drawable::~Drawable()
line 28 : Undefined reference to Drawable::~Drawable()

Could you help me plz ?

thanks, Samuel.

推荐答案

class Drawable
{
public :
    virtual void draw() = 0;
	virtual ~Drawable() {};
};
 
class MyDrawable : public Drawable
{
public :
    virtual void draw();
    MyDrawable();
    virtual ~MyDrawable();
private :
    int * data;
};
 
MyDrawable::~MyDrawable()
{
    delete data;
}
 
void MyDrawable::draw()
{
 
}
 
MyDrawable::MyDrawable()
{
    data = new int;
}
 
void del(Drawable* drawable)
{
    delete drawable;
}
 
int main()
{
    del(new MyDrawable());
}





为什么?

http://stackoverflow.com/questions/270917/why-should-i-declare-a-virtual-destructor-for-an-abstract-class-in-c [ ^ ]



http://accu.org /index.php/journals/233 [ ^ ]





回复评论的更多信息:



http://stackoverflow.com/questions/3336499/virtual- desctructor-on-pure-abstract-base-class [ ^ ]



您还可以:



Why?
http://stackoverflow.com/questions/270917/why-should-i-declare-a-virtual-destructor-for-an-abstract-class-in-c[^]

http://accu.org/index.php/journals/233[^]


A little more info in response to comments:

http://stackoverflow.com/questions/3336499/virtual-desctructor-on-pure-abstract-base-class[^]

You could also have:

class Drawable
{
public :
    virtual void draw() = 0;
	virtual ~Drawable() = 0;
};

Drawable::~Drawable()
{
}



见这里:

https://msdn.microsoft.com/en-us/library/hy3y5wee.aspx [ ^ ]



http://eli.thegreenplace。 net / 2010/11/13 / pure-virtual-destructors-in-c [ ^ ]


这篇关于如何解决未定义的引用错误消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆