C++ 抽象函数指针不';行不通

C++ 抽象函数指针不';行不通,c++,pointers,C++,Pointers,我为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 o

我为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;
}

我在这个问题上的方法是不是错了?我怎么能解决它呢?

Yoo应该给
函数分配一个
NULL
值,例如在构造函数中,如果(currentWidget->layout!=NULL)进行测试
有意义,如果您不这样做,函数将指向一些垃圾,测试将通过,您将执行到垃圾中,在最佳情况下导致GPF。
那么,从设计的角度来看,为什么要使用原始函数指针?这类事情应该用多态性来处理。

第一个问题是,你试图将非成员函数指针视为成员函数指针。它应该是哪一个?第二个指针没有明显的错误;它到底有什么问题rk?好的,我理解空值,但是多态性是什么意思?那么跳过虚拟函数?如果是你的意思,我为什么要这么做?是的,你应该避免函数poinet,为什么不使用另一个虚拟函数呢?我需要函数指针,例如,如果你有一个按钮,它应该执行另一个函数(但取决于我如何设置菜单结构)