可以包含一个库在C++中打破另一个库的功能吗?

Mar*_*dik 2 c++

我在C++项目中使用八度音程库.

#include <octave/oct.h>
Run Code Online (Sandbox Code Playgroud)

刚才我添加了一个标题any_iterator来自Thomas Becker的实现

#include "any_iterator.hpp"
Run Code Online (Sandbox Code Playgroud)

我刚刚添加了标题,无法构建项目.超过20个错误和超过50个警告出现.全部在八度标题中.例如:

/usr/include/octave/lo-mappers.h:52: 
error: expected unqualified-id before ‘(’ token
Run Code Online (Sandbox Code Playgroud)

在代码中:

#if defined (HAVE_CMATH_ISNAN)
inline bool xisnan (double x)
{ return std::isnan (x); }         // line 52
#else
Run Code Online (Sandbox Code Playgroud)

要么

/usr/include/octave/ov-base.h:580: 
error: expected ‘)’ before ‘void’
Run Code Online (Sandbox Code Playgroud)

在声明中:

virtual octave_value isnan (void) const;
Run Code Online (Sandbox Code Playgroud)

一旦我删除标题,问题就消失了.同样在一个单独的项目中,any_iterator工作按预期进行.它只是看起来不能共存.

有任何想法吗?我完全迷失了.该any_iterator连被命名空间的保护.

小智 6

当然可以!为什么不?它可能是任何东西,真的.举个例子 - 在标题中打开一个命名空间然后忘记关闭它,然后在你的项目中包含这个标题就完成了.编译器会变成杜鹃,并开始向你指出错误,指向与错误无关的不同地方.