问题:关于类的问题。

sad_4978 2003-08-22 12:52:35
我创建了一个抽象基类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)初始化起始点和终止点,可是总是出现错误。希望各位指点迷津,小弟在此给各位作揖了!

...全文
69 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangweintk 2003-08-22
  • 打赏
  • 举报
回复
纯虚函数
virtual void display() = 0;//绘制图形的虚函数

在继承类中必须实现。
zhenbe 2003-08-22
  • 打赏
  • 举报
回复
你的第二种解决方法是对的。
你的类Shape 虽然是纯虚函数,但是也得实现构造函数Shape(void){};你不加{},只是一个声明,加上{},就变成inline的函数实现体了。~Shape(){}和~Line(){}都是一个道理。
talcon_hu 2003-08-22
  • 打赏
  • 举报
回复
你既然声明了成员函数,就要去实现它,否则编译器就会报错

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧