1

我正在尝试使用运行时提供的方法在 ac 程序中设置全局可访问的回调函数。

到目前为止,我有以下内容:

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);
}

这给出了一个错误说明:未知类型名称“回调”

我尝试了几种方法并得到了各种错误。

您可以提供的任何帮助将不胜感激。

4

2 回答 2

2

您有两个错误:第一个是您没有在所需的每个源文件中定义结构。将结构的定义从principal.c源文件移动principal.h到头文件。

另一个是您没有定义类型 Callback,而是定义了该名称的结构。这意味着您必须在声明和定义变量struct时使用关键字。globalCallback

于 2013-06-18T15:54:21.950 回答
0
extern Callback globalCallback;

改用这个:

extern struct Callback globalCallback;

在 C 中,当您仅声明 时,您需要将 atypedef用作类型名称。这与将声明为新类型的 C++ 不同。Callbackstruct CallbackCallback

如果你想为你的结构类型创建一个类型别名(我不推荐),你可以这样做:

typedef struct Callback Callback;
于 2013-06-18T15:51:31.077 回答