我有这个代码用于mbed微控制器的GUI设计:
这是我的抽象类Widget.h,它有不同的子类,如Button或Fader(不确定我是否可以在抽象类中以这种方式添加变量,但它会编译。
class Layout; //incomplete type
class Widget {
public:
virtual void display(int x, int y) = 0; //pure virtual function for displaying the object
virtual bool touchEvent(int x, int y)= 0; //pure virtual function for checking if the touch does something for the widget
void (*function)();
Layout *layout;
};
现在我想调用我创建的函数指针
if(currentWidget->function != NULL){
(currentWidget->function)();
}
但程序在这里停止。我也想像这样更改activeLayout,但它也不起作用。
if(currentWidget->layout != NULL){
Layout *templayout = currentWidget->layout;
activeLayout = templayout;
}
我在这方面的做法是错误的吗?我怎么能解决它?
答案 0 :(得分:1)
Yoo应该为NULL
分配一个function
值,例如在构造函数中,以使测试if(currentWidget->layout != NULL)
有意义,如果不这样,函数将指向一些垃圾,测试将通过,你将执行垃圾,在最好的情况下导致GPF。
那么,从设计的角度来看,为什么使用原始函数指针?这样的事情应该用多态来处理。