【发布时间】:2011-08-25 09:34:07
【问题描述】:
我正在使用来自 C++ 的 C 库 (libgretl),它的一些函数与我的代码冲突,所以我想将它包装在命名空间中,如下所示:
namespace libgretl {
extern "C" {
#include <gretl/libgretl.h>
}}
但是,这无法编译,我从 gcc 文件中得到“未定义”错误(在 Windows 上使用 mingw32 和 gcc 4.5.2)。 第一个错误来自文件 c++/cstddef 的以下代码块:
_GLIBCXX_BEGIN_NAMESPACE(std)
using ::ptrdiff_t;
using ::size_t;
_GLIBCXX_END_NAMESPACE
宏分别扩展为namespace std { 和}。在这些之后还有更多错误。
省略extern "C" 指令没有帮助。使用匿名命名空间可减少错误数量,但仍无法编译。
因此,我的问题是,是否有某种方法可以包含这样的 C 库并将其函数放入命名空间,而不更改 gcc 或库的源文件?
谢谢。
迈克尔
【问题讨论】:
-
我认为简短的回答是否定的
-
问题可能是
gretl/libgret1.h包含stddef.h,因此您在命名空间中间接包含标准标头,这是一个禁忌。
标签: c++ namespaces