【问题标题】:Methods not declared after including包含后未声明的方法
【发布时间】: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,请删除包含 &lt;cstdlib&gt; 并改用 &lt;stdlib.h&gt;;如果您正在编写 C++,请将源文件名更改为 grover.cc。我怀疑这可能与您的问题有关,尽管可能是其他问题。

标签: c business-process-management undeclared-identifier aubio


【解决方案1】:

您传递给aubio_tempo_do 的参数是否具有正确的类型?
(aubio_tempo_t *o, fvec_t * input, fvec_t * tempo) 我无法从示例代码中看出。

如果不是,编译器可能会抱怨它没有看到具有与您的参数匹配的签名的函数的重载版本...(尽管我认为对于这种情况会有更具描述性的错误消息) .

【讨论】:

  • 我认为可能是这种情况,但是在仔细检查了我的变量类型之后,它们确实与 中定义的那些匹配(或者更准确地说是
  • 最终,您的答案是最接近的。就 apt-get 提供的库而言,aubio_tempo_do 实际上已被弃用。原来这个方法是由另一个包从源代码编译和安装的。
【解决方案2】:

据我所知,您应该包含另一个文件

#include <aubio/tempo/tempo.h>

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2018-03-28
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多