【问题标题】:How to include header files with similar names in C++ project如何在 C++ 项目中包含具有相似名称的头文件
【发布时间】:2017-05-14 11:31:06
【问题描述】:

我在我的 C++ 程序中使用了一个外部库。这个库有一个名为“Common.h”的文件。在不知道这个文件的情况下,我还在我的程序中创建了一个“Common.h”。在标头中使用编译器标志“#pragma once”,我可以确保这两个文件都可以包含在编译中。但是,我意识到当我在程序中调用我的“Common.h”时,预处理器错误地包含了外部库中的“Common.h”,这会破坏编译。有没有像“命名空间”这样的选项允许我包含正确的文件。我发现这真的很难,因为我们可能不(实际上不需要)了解外部库中的所有文件。

【问题讨论】:

  • 在使用相同名称时区分它们的唯一方法是在 include 指令中包含部分或全部文件路径。
  • 您可以将标题存储在项目子文件夹和#include "my_project/Common.h" 中。 TBH 图书馆应该已经为自己做到了。也许您的编译器包含标志设置不正确?
  • 让文件夹名称为头文件的命名空间。

标签: c++ gcc c-preprocessor


【解决方案1】:

您可以简单地重命名您的“common.h”文件,然后包含该文件

【讨论】:

  • 请看我对yugr的回复
【解决方案2】:

通常程序有几个所谓的包含路径来查找头文件。您似乎已经包含了包含 "Common.h" 文件的目录的路径以及库头目录。对我来说,完美的解决方案似乎是删除库文件的包含路径并使用显式相对路径,如:

#include "mylib/include/Common.h"

【讨论】:

  • 不要忘记 #include 和 #include "" 有不同的优先级。一个带有 的文件夹在平台定义的文件夹(特定于实现)中查找,其他 - 首先在项目的文件夹中,非递归,因此应该使用部分路径(有实现细节,但这主要是因为大量不同的平台)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
相关资源
最近更新 更多