【发布时间】:2011-01-28 21:48:15
【问题描述】:
我正在尝试使用 aubio 库用 C 语言编写一个简单的 bpm 计算程序。
在我尝试调用 aubio_tempo_do (documentation) 之前,一切似乎都很顺利
不幸的是,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>
没有运气:\
== 编辑 ===========
带有 -E 标志的 g++ 输出以检查预处理:http://pastebin.com/mbFEysJ2
源代码可以在这里找到:http://github.com/kellydunn/grover
相关源码摘录:http://pastebin.com/KRmbZqg4
【问题讨论】:
-
您可以通过将
-E标志添加到您的GCC 命令行(例如gcc -E file.c)并查看是否包含必要的声明来检查预处理器的输出。 -
使用 -E 标志编译后,我检查了输出并确认 aubio_tempo_do 方法出现在我需要定义的代码之前。
-
@kelly:你能发布一个完整的源代码示例来演示这个问题吗?你能把
gcc -E的输出上传到pastebin.com吗?您所描述的只能通过编译器错误来解释,我认为这不太可能。 -
当然,我会修改我原来的帖子
-
@kelly.dunn:你在写 C 还是 C++?您不能将两者混为一谈,它们是不同的语言。如果您正在编写 C,请删除包含
<cstdlib>并改用<stdlib.h>;如果您正在编写 C++,请将源文件名更改为grover.cc。我怀疑这可能与您的问题有关,尽管可能是其他问题。
标签: c business-process-management undeclared-identifier aubio