【发布时间】:2014-11-18 14:59:07
【问题描述】:
我现在正在尝试使用 cmake 在 linux 中构建一个 c++ 库。如果我不启用 -std=c++0x 选项,我总是会收到以下代码的编译错误error: 'div_t' was not declared in this scope:
int xPos;
div_t divResult;
divResult = div(xPos,8);
然后,如果我使用 cmake 启用 -std-c++0x 选项:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x",那么一切都很好。但是,在我的库中,我没有使用任何 c++0x 功能,所以我不愿意设置 std=c++0x 选项。所以我搜索了定义 div_t 的头文件,发现它在 stdlib.h 中定义在下面的 MACRO 中:
__BEGIN_NAMESPACE_STD
typedef struct
{
int quot;
int rem;
} div_t;
....
....
__END_NAMESPACE_STD
在我看来,如果我可以启用这些宏,我可以在不启用 c++0x 功能的情况下构建库。所以我的问题是在这种情况下我能做些什么。
顺便说一句,如果在linux机器上只安装g++4.4,我可以在不启用c++0x功能的情况下很好地构建库。当我也安装g++4.6并将g++4.6设为默认g++时,开始出现编译错误。即使我将默认的 g++ 更改为 g++4.4,如果我不启用 c++0x 功能,编译错误仍然存在。
【问题讨论】:
-
或许你可以透露一下这个编译错误到底是什么?
-
@molbdnilo 我按照你的建议添加了编译错误。
-
div_t应该在 C++03 中可用。 (据我所知,您找到的宏只是用于在应该添加的时候将内容添加到std命名空间。)您是#include <cstdlib>还是#include <stdlib.h>? -
@molbdnilo 谢谢,如果我包含
那么编译错误就会消失。 -
@molbdnilo 我没有意识到我没有包含
因为它在 g++4.4 是计算机中安装的唯一编译器时工作。