为什么在通过指针调用函数时会收到错误?
问题描述:
我想通过按下调用的函数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;
因此我这样做:
button->callback = my_function;
当创建my_function是:
void my_function (newtComponent co, void* data)
{
printf ("Hello world\n");
}
按钮的处理程序是这样做的:
if(button->callback) button->callback(button, button->callbackData);
不幸的是,我得到的错误:
"Pointer to incomplete class type is not allowed"
button->callback = my_function;
我在做什么错?
答
我想问题是你有一种“循环参考”。如果您首先声明newtCallback
,则未定义参数newtComponent
。如果您首先声明该结构,则newtCallback
未定义。
为了避免这种行为的,试试这个:
int main(){
newtComponent button;
button.callback = my_function;
if(button.callback) button.callback(button, button.callbackData);
return 0;
}
似乎很好地工作:
#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");
}
我测试。
+0
非常感谢!有用!!!!! –
您的'typedef'是否在结构定义之前? –
告诉我们'按钮'是如何声明的? –
什么是'newtComponent'定义为? – owacoder