我有一节课:圆圈。它可以绘制实心圆或圆形圆。基于它的当前设置,我想要一个调用draw_filled()或draw_outlined()的通用draw()方法。
在我的课堂上,我有成员void (*draw)(void);
我有两个私人函数:void draw_filled(); void draw_outlined();
然后,我有以下方法:
void Circle::fill(const bool fill)
{
m_fill = fill;
if (fill)
draw = draw_filled;
else
draw = draw_outlined;
}
我在两个绘图分配上都收到错误:
错误C2440:' =' :无法转换为' void(__ thiscall X2D :: GL :: Circle :: *)(void)' to' void(__ cdecl *)(void)' 1 GT;没有可以进行此转换的上下文
通常,我不会在课程中使用函数指针,所以这对我来说是新的。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
从错误消息中可以看出draw
是指向函数的通用指针,而不是指向成员函数的指针。抽奖声明应为void (X2D::GL::Circle::*draw)(void)
,以便draw
指向Circle
的成员函数。