问题:关于类的问题。
我创建了一个抽象基类Shape。然后,由Shape派生出Line。代码如下:
class Shape//抽象基类
{
public:
BYTE m_btype; //绘制单元的类型
int m_Index; //图元索引
PENTYPE *pen;
Shape(void);
~Shape();
virtual void display() = 0;//绘制图形的虚函数
};
/////////////////////////////////////////////////////////////////////////////////////////
class Line:public Shape//绘制直线类
{
public:
POINT Start; //直线的起始点
POINT End; //直线的终止点
Line(void);
Line(POINT Dtemp,POINT Utemp)//D代表Down即鼠标按下获取起始点,U代表Up鼠标抬起获取终止点
{
Start = Dtemp;
End = Utemp;
}
~Line();
void display()
{
CWnd* pWnd;
CDC *dc = pWnd->GetDC();
HPEN hOldPen,hPen;
hPen=CreatePen(pen->penstyle,pen->penstyle,pen->pencolor);
hOldPen = (HPEN)dc->SelectObject(&hPen);
dc->MoveTo(Start);
dc->LineTo(End);
}
};
错误提示1:error LNK2019: 无法解析的外部符号 "public: __thiscall Shape::Shape(void)" (??0Shape@@QAE@XZ) ,该符号在函数 "public: __thiscall Line::Line(void)" (??0Line@@QAE@XZ) 中被引用
错误提示2:error LNK2019: 无法解析的外部符号 "public: virtual __thiscall Line::~Line(void)" (??1Line@@UAE@XZ) ,该符号在函数 "public: virtual void * __thiscall Line::`scalar deleting destructor'(unsigned int)" (??_GLine@@UAEPAXI@Z) 中被引用
解决方法一:出现错误后,Shape(void),~Shape()和~Line()都屏蔽掉,再次编译,通过。程序正常运行。
解决方法二:出于试验的想法,我在Shape(void),~Shape()和~Line()三个函数后加上{},再次编译,通过。程序正常运行。
问题虽然是解决了,但我更加迷茫了。如果说解决问题前是在荒野中迷失方向,那么解决问题后是从荒野中走入了亚马逊雨林,更加没有方向。还有,我在一个CxxView类中建立了这个对象,CxxView类中的构造函数默认调用Line(void),我想在触发鼠标左键按下和抬起后调用Line(POINT Dtemp,POINT Utemp)初始化起始点和终止点,可是总是出现错误。希望各位指点迷津,小弟在此给各位作揖了!