我在XCode中编译一个项目,其中包含和链接了MySQL ++。出于某种原因,我不断收到以下编译器错误:
'断言'未在此范围内声明
源自cpool.h,一个头文件,是MySQL ++的一部分。有谁知道为什么会被触发?
编辑:作为参考,MySQL ++是通过Macports安装的。
答案 0 :(得分:7)
最明显的答案是“assert.h”未包含在您的包含路径中或未在您的包含路径中找到。另一种解释是,在包含头部之后的某个时刻,断言宏已经未定义。
编辑:既然你说assert.h被包含了,我们暂时认为它是被发现的,因为它是一个标准的标题,那么这就留给我们上面提到的最后一种可能性,即宏已经未定义。
由于cpool.h本身不会这样做,所以必须是这样的情况,即assert.h先前由你自己或间接由另一个第三方标题包含,并且在此和你包含的cpool.h之间发生了未定义。通过将cpool.h include移动到文件顶部,可以轻松测试这一点。
答案 1 :(得分:3)
可能是你的include路径中的另一个库有一个不同的“assert.h”文件,你不知不觉中包含了那个而不是系统的标准< assert.h&gt ;.
在Mac OSX上编写使用gstreamer的应用程序时遇到了这个问题。事实证明,gstreamer的include目录(/Library/Frameworks/GStreamer.framework/Headers)包含一个文件“assert.h”,它是非标准的,不适合替代真正的assert.h。当我将-I / Library / Frameworks / GStreamer.frameworks / Headers添加到我的编译命令时,突然我的消息来源,它只是说“#include< assert.h>”其中包括gstreamer版本。这导致我的编译失败并出现了同样的错误。
答案 2 :(得分:3)
在c ++中添加cassert标题可以解决你的问题。
#include <cassert>