循環バッファオブジェクトを作成するために 'TPCircularBuffer'クラスを使用しています(this website)。 これは私の現在のコードです:オブジェクトをインスタンス化することはできますが、その関数にはアクセスできません - 'Symbol s s not found'エラー
TPCircularBufferRecord bufferRecord; //1
TPCircularBufferInit(&bufferRecord, kBufferLength); //2
1行目は正常に動作し、そのためには、リンカは、クラスのための.cppと.hファイルを発見したことを意味します。しかし、2行目はエラーで、コンパイルされません。
Undefined symbols:
"TPCircularBufferInit(TPCircularBufferRecord*, int)", referenced from:
StereoEffect3::StereoEffect3(ComponentInstanceRecord*)in StereoEffect3-1DB483EC8D75827.o
StereoEffect3::StereoEffect3(ComponentInstanceRecord*)in StereoEffect3-1DB483EC8D75827.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
私はそれが元のソースコードに問題はないと思うが、私はとにかくそれをここに含まれます: TPCircularBuffer.c
リンカ/コンパイラがTPCircularBufferInit関数を見つけられない理由を知っている人はいますか?次のように TPCircularBufferInit機能は次のとおりです。
inline void TPCircularBufferInit(TPCircularBufferRecord *record, int length) {
record->head = record->tail = record->fillCount = 0;
record->length = length;
}
私は私がそれに引数の正しいタイプを渡しているかなり確信している...
元のコードがC用であることは注目に値するが、私はそれをC++で使用している。 .cファイルの名前を.cppに変更し、ポインタの一部をvoidポインタからfloatに変更しました。voidポインターとのポインタの算術が好きではないようです。 – JimmyB
ソースファイルから 'inline'を削除してみてください。インライン関数は実際にはヘッダファイルにしか属しません。 –
@JimmyB:shoehorningの代わりに['Boost.CircularBuffer'](http://www.boost.org/doc/libs/release/libs/circular_buffer/index.html)を使用することを強くおすすめします**この悪いCコード。 – ildjarn