1

我在 VS2013,C++ 控制台应用程序中。我在将 boost 集成到大型框架中时遇到问题。如果我尝试将它们集成到空白控制台应用程序中,它们工作正常。一旦我包含框架的“根” .h 文件(其中包括交易中的“许多”其他 .h 文件),它就会中断。这些 .h 文件“污染”了 boost 文件(以及之后包含的任何内容,结果参差不齐,不,我不能只首先包含 boost 文件,不幸的是,这并不总是一种选择)。我发现至少有一个根级#define 干扰并导致编译错误,但我找不到导致运行时问题的其他一些冲突。

具体来说,我的问题是:如何判断 .h 文件定义了哪些符号?希望以后会发生哪些冲突?我尝试使用谷歌搜索,但找不到执行此操作的工具。

或者是否有其他方法可以“隔离”它们(我的问题 .h 文件),但仍然让它们正确链接到它们在其他 .dll 中调用的函数?

4

2 回答 2

1

您可以g++ -E用作静态代码检查工具(无需更改工具集)。它能够告诉您何时重新定义某些内容,但不能告诉您何时将 a#define用作另一个名称(它无法判断它是否是真正的替换)。

如果这不是问题的根源,那么您可能需要采取更全面的方法:开始将项目的#define使用更改为其他构造,例如 const 和 short 函数。这将允许编译器通过重载或抱怨存在冲突来解决差异。

于 2014-10-15T17:29:06.707 回答
0

再次包含相同的头文件可能会导致问题,您可以为每个头文件创建一个符号,以便如果该头文件已经包含在其他头文件中,则不应包含它。

#ifndef
#define __header_file_name_H
.....some code
#endif
于 2014-10-15T16:41:34.473 回答