包括一个库是否会破坏C++中另一个库的功能
Can including one library break the functioning of another library in C++?
我正在C++项目中使用八度库。
#include <octave/oct.h>
刚才我添加了一个标题,其中包含托马斯贝克尔的any_iterator
#include "any_iterator.hpp"
我刚刚添加了标题,无法构建项目。出现了 20 多个错误和 50 多个警告。全部在八度标题中。例如:
/usr/include/octave/lo-mappers.h:52:
error: expected unqualified-id before ‘(’ token
在代码中:
#if defined (HAVE_CMATH_ISNAN)
inline bool xisnan (double x)
{ return std::isnan (x); } // line 52
#else
或
/usr/include/octave/ov-base.h:580:
error: expected ‘)’ before ‘void’
在声明中:
virtual octave_value isnan (void) const;
一旦我删除了标题,问题就消失了。同样在单独的项目中,any_iterator
按预期工作。只是看起来它们不能共存。
有什么想法吗?我完全迷失了。any_iterator
甚至受命名空间保护。
当然可以!为什么不呢?它可以是任何东西,真的。举个例子 - 在标题中打开一个命名空间,忘记关闭它,然后将这个标题包含在你的项目中,你就完成了。编译器会变得杜鹃,开始向你抛出错误,指向实际上与错误无关的不同地方。
是的。但是如何是一个更困难的问题。
我能想到至少有两个选项可以帮助调试它。
-
将 -E 添加到编译文件的命令行选项中。这将导致预处理器运行并吐出附加了所有标头和展开所有宏的代码。然后,您可以尝试编译该预处理,并可以确切地看到它为什么会窒息。
-
尝试使用 clang 而不是 gcc 进行编译。Clang更擅长提供可理解的错误消息。
输入"any_iterator.hpp"解决了问题的事实意味着any_iterator包含有问题的代码。它可能间接包含 cmath 并以某种方式引起问题。我敢打赌,如果你包括高于八度/十月的cmath,它会以同样的方式中断。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用std::transform将一个范围的元素添加到另一个范围中
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- C++试图读取一个文件并输出到另一个文本文件
- 如何将指针从一个void函数传递到另一个C++
- 如何从另一个文件继承私有成员变量和公共函数
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 如何在C++中将函数发送到另一个进程
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口