我想按一下名为[{1}}的函数按钮:
按钮是结构的一个元素:
my_function
struct newtComponent_struct {
...
newtCallback callback;
void * callbackData;
...
void * data;
};
newtCallback callback
因此我这样做:
typedef void (*newtCallback)(newtComponent, void *);
newtComponent is:
typedef struct newtComponent_struct * newtComponent;
my_function是:
button->callback = my_function;
按钮的处理程序正在执行此操作:
void my_function (newtComponent co, void* data)
{
printf ("Hello world\n");
}
不幸的是,我收到错误:
if(button->callback) button->callback(button, button->callbackData);
我做错了什么?
答案 0 :(得分:1)
我想问题是你有一种"循环引用"。如果您首先声明newtCallback
,则不会定义参数newtComponent
。如果您首先声明结构,则newtCallback
未定义。
要避免此类行为,请尝试以下操作:
#include <stdio.h>
struct newtComponent_struct; // declaration first
typedef struct newtComponent_struct newtComponent;
typedef void (*newtCallback)(newtComponent, void *);
struct newtComponent_struct {
newtCallback callback;
void * callbackData;
void * data;
};
void my_function (newtComponent co, void* data)
{
printf ("Hello world\n");
}
我测试过:
int main(){
newtComponent button;
button.callback = my_function;
if(button.callback) button.callback(button, button.callbackData);
return 0;
}
似乎工作正常。