7

我正在 XCode 中编译一个项目,其中包含并链接了 MySQL++。出于某种原因,我不断收到以下编译器错误:

'assert' 未在此范围内声明

源自 cpool.h,它是 MySQL++ 的一部分的头文件。有谁知道为什么会触发这个?

编辑:作为参考,MySQL++ 是通过 Macports 安装的。

4

3 回答 3

7

最明显的答案是“assert.h”未包含在您的包含路径中或未在您的包含路径中找到。另一种解释是断言宏在包含标头后的某个时间点未定义。

编辑:既然你说 assert.h 是包含在内的,我们暂时假设它是一个标准头文件,所以这给我们留下了我上面所说的最后一种可能性,即宏未定义。

由于 cpool.h 本身不会执行此操作,因此您必须更早地包含 assert.h 或由另一个 3rd 方标头间接包含,并且在此与您包含 cpool.h 之间发生未定义。这可以通过将 cpool.h 包含移动到文件顶部来轻松测试。

于 2010-05-25T22:55:33.313 回答
7

在 c++ 中添加 cassert 标头应该可以解决您的问题。

#include <cassert>
于 2016-03-09T14:16:48.437 回答
3

可能是您的包含路径中的另一个库具有不同的“assert.h”文件,而您在不知不觉中包含了该文件,而不是系统的标准 <assert.h>。

我在 Mac OSX 上编写使用 gstreamer 的应用程序时遇到了这个问题。事实证明,gstreamer 的包含目录(/Library/Frameworks/GStreamer.framework/Headers)包含一个文件“assert.h”,它是非标准的,不适合替换真正的 assert.h。当我将 -I/Library/Frameworks/GStreamer.frameworks/Headers 添加到我的编译命令中时,突然间我的源代码中出现了“#include <assert.h>”,其中包括 gstreamer 版本。这导致我的编译失败并出现与您遇到的相同错误。

于 2013-07-09T19:55:45.227 回答