0

関数を AURenderCallback inputProc に割り当てようとしています

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

しかし、playerCallback は setupRemoteIO と同じファイルとクラスに存在しますが、このスコープでは playerCallback が宣言されていないと書かれています。

プレーヤーのコールバックは次のようになります

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 に答える