Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何解决表头订单问题_C++_Header_Include - Fatal编程技术网

C++ 如何解决表头订单问题

C++ 如何解决表头订单问题,c++,header,include,C++,Header,Include,我有以下问题: 我的代码依赖于两个外部包 (仅标题) (静态库+标题) 如果我编写以下代码: #include "sofa.h" #include "Eigen/Dense" 我收到以下错误消息: 还有更多的错误 但是,如果我更改包含的顺序,它将编译: #include "Eigen/Dense" #include "sofa.h" 很好 问题的原因是什么? 我的主要问题是,我不知道这种行为是如何被称为,所以我不能真正有效地谷歌它。 不能更改EIGEN或IAU SOFA的任何源代码(因为

我有以下问题: 我的代码依赖于两个外部包

  • (仅标题)
  • (静态库+标题)
如果我编写以下代码:

#include "sofa.h"
#include "Eigen/Dense"
我收到以下错误消息:

还有更多的错误

但是,如果我更改包含的顺序,它将编译:

#include "Eigen/Dense"
#include "sofa.h"
很好

问题的原因是什么?

我的主要问题是,我不知道这种行为是如何被称为,所以我不能真正有效地谷歌它。 不能更改EIGEN或IAU SOFA的任何源代码(因为它们由其他组维护,我们定期从他们的网页更新)


它也不是一个选项,只是修复一次,再也不要碰它。头文件的顺序会自动重新排列为字母顺序,这会在每次提交任何更改时将所有内容都弄乱,我们定期使用
优化导入
算法,该算法也会自动更改包含项

看起来一个库声明的宏与另一个库中的另一个变量/宏冲突。这是全局宏不好的原因之一。我同意,但如何修复它呢?请查看头文件。sofa.h似乎有检测已经存在的宏的检查,而eigen似乎是以自我为中心的,对其他代码一无所知。你可能需要实施某种黑客来解决它,这里没有简单的解决方案。如何将这些冲突的头分组到另一个头中,禁用该特定文件的
优化导入
和头重新排序,然后包括该额外头,而不是单独的eigen和sofa。您可以创建一个组合头,始终以正确的顺序添加它们,并在需要两者时使用它。
#include "Eigen/Dense"
#include "sofa.h"