我将如何处理此链接器错误?

Posted

技术标签:

【中文标题】我将如何处理此链接器错误?【英文标题】:How would I handle this linker error? 【发布时间】:2012-12-11 11:16:37 【问题描述】:

我正在构建一个 mfc 应用程序,使用户能够绘制图形对象(类似于 ms paint)。但由于某种原因,我收到以下链接器错误:

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】:

正如错误消息所说,您还没有为函数定义主体

virtual void Draw(CDC* pDC);

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

virtual void Draw(CDC* pDC)  

virtual void Draw(CDC* pDC) = 0;

【讨论】:

以上是关于我将如何处理此链接器错误?的主要内容,如果未能解决你的问题,请参考以下文章

CocoaAsyncSocket Apple Mach-O 链接器错误

使用 C++ 的 SOIL 库链接器错误问题

如何处理此索引超出范围错误 (LINGO)

winsock 的 v8 发布模式链接器错误

链接器错误与DirectX C ++

将 WRL 用于 C++/CX 函数 - 链接器错误 [重复]