Методы, не объявленные после включения

Я пытаюсь написать простую программу расчета ударов в минуту на C с использованием библиотеки aubio.

Кажется, все идет гладко, пока я не пытаюсь обратиться к aubio_tempo_do (документация)

К сожалению, make выдает ошибку:

‘aubio_tempo_do’ was not declared in this scope

что, кажется, не имеет особого смысла, учитывая, что библиотека aubio предоставляет эту функцию:

grep -r "aubio_tempo_do" /usr/local/include/aubio/
/usr/local/include/aubio/tempo/tempo.h:void aubio_tempo_do (aubio_tempo_t *o, fvec_t * input, fvec_t * tempo);

Я пытаюсь включить файл tempo.h в свой заголовочный файл, но, увы, процедура make продолжает выдавать ту же ошибку.

// header file
#include <aubio/aubio.h>
#include <aubio/tempo.h>

Есть предположения?

== Изменить ===========

Следует также сказать, что я пытался:

#include <aubio/tempo/tempo.h>

Не повезло :\

== Изменить ===========

Вывод g++ с флагом -E для проверки препроцессов: http://pastebin.com/mbFEysJ2

Исходный код можно найти здесь: http://github.com/kellydunn/grover

Соответствующий фрагмент исходного кода: http://pastebin.com/KRmbZqg4


person kelly.dunn    schedule 28.01.2011    source источник
comment
Вы можете проверить вывод препроцессора, добавив флаг -E в командную строку GCC (например, gcc -E file.c) и посмотрев, включаются ли необходимые объявления или нет.   -  person Adam Rosenfield    schedule 29.01.2011
comment
После компиляции с флагом -E я проверил вывод и подтвердил, что метод aubio_tempo_do встречается перед моим кодом, требующим определения.   -  person kelly.dunn    schedule 29.01.2011
comment
@kelly: Можете ли вы опубликовать полный пример исходного кода, демонстрирующий эту проблему? Можете ли вы загрузить вывод gcc -E на pastebin.com? То, что вы описали, можно объяснить только ошибкой компилятора, что я считаю маловероятным.   -  person Adam Rosenfield    schedule 29.01.2011
comment
конечно, я отредактирую свой исходный пост   -  person kelly.dunn    schedule 29.01.2011
comment
@Adam Адам, я постараюсь также вырезать соответствующие части исходного кода и вставить их в отдельные страницы pastebin.   -  person kelly.dunn    schedule 29.01.2011
comment
@kelly.dunn: Вы пишете на C или C++? Их нельзя смешивать, это разные языки. Если вы пишете C, удалите включение <cstdlib> и используйте вместо него <stdlib.h>; если вы пишете на C++, измените имя исходного файла на grover.cc. Я подозреваю, что это может быть связано с вашей проблемой, хотя это может быть что-то еще.   -  person Adam Rosenfield    schedule 29.01.2011
comment
как говорит Адам, не компилируйте код C с помощью g++.   -  person Jens Gustedt    schedule 29.01.2011
comment
@Adam @Jens Спасибо за помощь! Оба ваших ответа привели меня в правильном направлении. Компиляция проекта строго как код C помогла мне определить, что на самом деле на моей машине была установлена ​​предыдущая установка библиотечных функций. оказывается, я вызывал устаревшие методы: функции из /usr/local/include/aubio вместо /usr/include/aubio   -  person kelly.dunn    schedule 30.01.2011


Ответы (2)


имеют ли аргументы, которые вы передаете aubio_tempo_do, правильный тип?
(aubio_tempo_t *o, fvec_t * input, fvec_t * tempo) Я не могу сказать по примеру кода.

В противном случае компилятор может жаловаться на то, что он не видит перегруженную версию функции с сигнатурой, которая соответствует вашим аргументам... (Хотя я думаю, что для этой ситуации будет более описательное сообщение об ошибке).

person AShelly    schedule 29.01.2011
comment
Я думал, что это могло быть так, но после двойной проверки моих типов переменных они действительно соответствуют тем, которые определены в ‹aubio/tempo.h› (или, точнее, ‹aubio/tempo/tempo.h›). - person kelly.dunn; 29.01.2011
comment
В конечном счете, ваш ответ был самым близким. aubio_tempo_do фактически устарел с точки зрения библиотек, доступных на apt-get. оказывается, этот метод был скомпилирован и установлен из исходного кода другим пакетом. - person kelly.dunn; 30.01.2011

Насколько я вижу, вы должны включить еще один файл

#include <aubio/tempo/tempo.h>
person Elalfer    schedule 28.01.2011