0

我正在尝试为 AURenderCallback inputProc 分配一个函数

int setupRemoteIO(audio unit etc){
    inProc.inputProc = playerCallback
}     

但它表示 playerCallback 未在此范围内声明,尽管 playerCallback 与 setupRemoteIO 存在于同一文件和类中。

播放器回调是这样的

static OSStatus playerCallback(void *inRefCon etc)

可能是什么问题呢?

4

1 回答 1

2

在 C 语言中,您需要在第一次使用之前声明一个函数,即在文件中高于您尝试使用该函数的位置。这就是为什么包含文件通常聚集在文件顶部的原因。头文件中声明的所有符号都将在包含文件的整个代码中可用。

在这种情况下,这意味着您的回调声明:

static OSStatus playerCallback(void *inRefCon etc);

必须出现在您的setupRemoteIO()函数之前,以便编译器在您使用它时知道该函数存在。

当您使用 iOS 时,我还要指出,在最近的编译器中,此限制不适用于 Objective-C 方法。它曾经:你只能使用已经见过的方法选择器。但是在较新版本的 Clang 中,Objective-C 方法可以使用稍后在同一文件中声明的选择器而不会出错。

于 2012-05-28T08:07:32.900 回答