C++使用父类定义一个list后,怎么才能让子类调用其继承的虚函数?

最近在用win32做一个画图软件,定义了一个类Shape,类中有一个虚函数Draw(),然后想定义具体的形状比如Line、Rect等来继承Draw(),使其在调用的时候运行子类自己的函数来画图。
之后定义了一个list g_listPicInfo来存储画下的图形,在遍历list来画出来,但是无法运行。大概代码如下,希望得到解答。

Shape类:所有具体图形类的父类。
图片说明

Line类:定义了画线的函数。
图片说明

之后在主体部分定义了一个list用于保存所有的图形:
图片说明

在鼠标点击屏幕时通过两个函数保存点的坐标:
图片说明

函数主体:在鼠标抬起时判断是什么图形然后将其放入list中
图片说明

绘图:遍历list,调用Draw()函数画出所有图形
图片说明

报错:
图片说明

请问该如何解决呢?

begin和end后面缺少一对括号。

你的it->draw就是调用各个指针的函数。同时因为draw是虚函数。它会通过多态特性来实现调用真正子类指针的draw函数实现

图片说明
改为

it是指针没错的,但是it是父类类型的指针,其指向的对象是子类类型的,子类类型的对象是实现了画图函数的,就是Draw,当调用子类对象的函数时,也就是it->draw执行时,子类对象(每个有虚函数的类构造的对象的内部会有指向虚函数的指针,叫虚表指针)会依据其内部的虚表指针找到子类继承下来的虚函数来执行,在这里就是draw函数。这就叫多态性,概括的说,就是父类类型的指针指向了子类类型的对象。