我在VS2013,C ++控制台应用程序中。我在将boost集成到一个大型框架时遇到了问题。如果我尝试将它们集成到空白控制台应用程序中,它们可以正常工一旦我包含框架的“root”.h文件(其中包括“很多”其他.h文件),它就会中断。这些.h文件正在“污染”增强的那些(以及之后包含的任何内容,混合结果,不,我不能只包括增强的那些,不幸的是,这并不总是一个选项)。我发现至少有一个根级别的#define干扰并导致编译错误,但我找不到导致运行时问题的其他一些冲突。
具体来说,我的问题是:如何判断.h文件定义了哪些符号?希望以后哪些是冲突的呢?我试过谷歌搜索,但找不到这样做的工具。
还是有其他一些方法可以“隔离”它们(我的问题.h文件),但仍然可以将它们正确链接到他们在其他.dll中调用的函数吗?
答案 0 :(得分:1)
您可以使用g++ -E
作为静态代码检查工具(无需更改工具集)。它可以告诉你什么时候重新定义但是当#define
被用作另一个名字时(它无法判断它是否是真正的替换)。< / p>
如果这不是问题的根源,那么您可能需要采取更全面的方法:开始将项目的#define
用法更改为其他构造,例如const和短函数。这将允许编译器通过重载或抱怨存在冲突来解决差异。
答案 1 :(得分:0)
再次包含相同的头文件可能会导致问题,您可以为每个头文件创建一个符号,这样如果该头文件已经包含在其他头文件中,则不应该包含它。
#ifndef
#define __header_file_name_H
.....some code
#endif