我正在尝试使用运行时提供的方法在c程序中设置全局可访问的回调函数。
到目前为止,我有以下内容:
principal.h
-----------
extern Callback globalCallback;
principal.c
-----------
struct Callback {
void (*doubleCallback)(double * speed);
};
some_function(void (*updateDetected)(double*)){
globalCallback.doubleCallback = updateDetected;
}
other.c
-----------
#include "principal.h"
void another_function(){
globalCallback.doubleCallback(&some_double);
}
这会出现错误说明:未知类型名称'Callback'
我尝试了几种方法并遇到了各种错误。
您可以提供任何帮助。
答案 0 :(得分:2)
您有两个错误:第一个是您没有在每个所需的源文件中定义结构。将结构的定义从principal.c
源文件移动到principal.h
头文件。
另一个是您没有定义类型 Callback
,而是定义该名称的结构。这意味着您在声明和定义struct
变量时必须使用globalCallback
关键字。
答案 1 :(得分:0)
extern Callback globalCallback;
请改用:
extern struct Callback globalCallback;
在C中,当您只声明typedef
时,您需要Callback
使用struct Callback
作为类型名称。这与C ++不同,它将Callback
声明为新类型。
如果要为结构类型创建类型别名(我不建议这样做),您可以这样做:
typedef struct Callback Callback;