0

ユーザーがグラフィカルオブジェクト(msペイントなど)を描画できるようにするmfcアプリケーションを構築しています。しかし、何らかの理由で、次のリンカーエラーが発生します。

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);

}

4

1 に答える 1

2

エラーメッセージは、関数の本体を定義していないことを示しています

virtual void Draw(CDC* pDC);

それを定義するか、クラスを抽象化します。つまり、派生クラスはそれを実装する必要があります。

virtual void Draw(CDC* pDC) { }

また

virtual void Draw(CDC* pDC) = 0;
于 2012-12-11T11:20:40.303 に答える