我正在构建一个mfc应用程序,它将使用户能够绘制图形对象(类似于ms画图)。但由于某种原因,我收到以下链接器错误:
CElement.obj:错误LNK2001:未解析的外部符号“public:virtual void __thiscall CElement :: Draw(class CDC *)”(?Draw @ CElement @@ UAEXPAVCDC @@@ Z)。
我知道它与CPolygon类中的虚拟绘图功能有关。但究竟是什么帽子造成的呢?
// CElement.h
class CElement : public CObject
{
public:
virtual ~CElement();
virtual void Draw(CDC* pDC);
};
注意:CElement将充当所有其他类(如CPolyline和CRectangle)的基类。 Draw函数是虚拟的 - 多态性的一个例子,CElement的Draw(CDC * pDC)将被派生类的Draw()函数覆盖
class CPolygon : public CElement
{
public:
CPolygon(CPoint mFirstPoint,CPoint mSecondPoint);
~CPolygon(void);
virtual void Draw(CDC* pDC);
---------------------------------------------------------------------------------------
//CElement.cpp
#include "CElement.h"
//constructors for the class
void CPolygon::Draw(CDC* pDC)
{
pDC->MoveTo(mStartPoint);
pDC->LineTo(mEndPoint);
答案 0 :(得分:2)
正如错误消息所示,您尚未为函数
定义正文virtual void Draw(CDC* pDC);
要么定义它,要么使类抽象,即派生类必须实现它。
virtual void Draw(CDC* pDC) { }
或
virtual void Draw(CDC* pDC) = 0;