J'utilise la classe 'TPCircularBuffer' pour créer un objet tampon circulaire, à partir de this website. Ceci est mon code actuel:Possibilité d'instancier un objet sans avoir accès à ses fonctions - Erreur 'Symbol (s) not found'
TPCircularBufferRecord bufferRecord; //1
TPCircularBufferInit(&bufferRecord, kBufferLength); //2
Ligne 1 fonctionne très bien, ce qui signifie que l'éditeur de liens a trouvé le Cpp et les fichiers .h de la classe. Cependant, la ligne 2 ne compile pas, avec l'erreur:
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
Je ne pense pas que ce soit un problème avec le code source d'origine, mais je vais l'inclure ici de toute façon: TPCircularBuffer.c
Est-ce que quelqu'un sait pourquoi l'éditeur de liens/compilateur ne trouve pas la fonction TPCircularBufferInit? La fonction TPCircularBufferInit est la suivante:
inline void TPCircularBufferInit(TPCircularBufferRecord *record, int length) {
record->head = record->tail = record->fillCount = 0;
record->length = length;
}
Je suis assez sûr que je passe le type d'arguments en elle ...
cela vaut la peine de noter que le code original est pour C, mais je l'utilise en C++. Je viens de renommer le fichier .c en .cpp, et j'ai changé certains des pointeurs de void en float, car il ne semblait pas aimer l'arithmétique du pointeur avec les pointeurs void ... – JimmyB
Essayez de supprimer le 'inline' du fichier source. Les fonctions incorporées n'appartiennent réellement qu'aux fichiers d'en-tête. –
@JimmyB: Je recommande fortement ** d'utiliser ['Boost.CircularBuffer'] (http://www.boost.org/doc/libs/release/libs/circular_buffer/index.html) au lieu d'utiliser ce pauvre code C. – ildjarn