我该如何处理这个链接器错误?

时间:2012-12-11 11:16:37

标签: mfc error-handling polymorphism linker-errors

我正在构建一个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);

}

1 个答案:

答案 0 :(得分:2)

正如错误消息所示,您尚未为函数

定义正文
virtual void Draw(CDC* pDC);

要么定义它,要么使类抽象,即派生类必须实现它。

virtual void Draw(CDC* pDC) { }

virtual void Draw(CDC* pDC) = 0;