为什么在通过指针调用函数时会收到错误?

时间:2016-02-19 16:51:04

标签: c linux

我想按一下名为[{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);

我做错了什么?

1 个答案:

答案 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;
}

似乎工作正常。