如何包含来自不同文件夹的不同 headers?

How to include different headers from different folders?

我有一个 C++ 项目,我喜欢组织我的代码,但是当我将所有内容放在单独的目录中时(headers 和源文件放在一起)我无法从另一个文件夹中包含 headers . 例如:我有两个名为 "FooException" 和 "ContentProvider" 的 classes,它们显然进入不同的目录,FooException 是一个例外,ContentProvider 是一个实用程序。当然,我将它们放在不同的文件夹中,但是当我尝试在 ContenProvider 中包含 FooException 时,它不起作用,并说找不到源文件。有没有人遇到过这样的问题?有什么建议么? 提前致谢,新年快乐!

更新: 好的,人们建议查看 #include <> 和 #include "" 之间的区别,但仍然没有帮助。尽管我可以从我的 Main.cpp 访问任何文件,但无论我使用哪个 #include-statement 我都无法访问我的 ContentProvider class 和 FooException class 中的文件.此外,无论我使用哪种语句,我都可以从项目中的任何位置访问 SFML-library。它与我项目中 "include" 目录中的 SFML-directory 有关系吗?

更新 2: 好的,问题解决了,它与#include <> 和#include "" 无关。我只需要在写路径名称之前加上“..\”就可以了,效果很好。我把最合适的答案标出来了。

您必须在 IDE/Makefile 中正确配置 include header paths 设置。简而言之,为了能够搜索特定的头文件,编译器必须知道在哪里寻找它。例如,在 g++ 中,我们使用 -I 标志来提供各种包含路径。

例如,

$g++ -I/usr/abc/A/ main.cpp

在main.cpp中包含了a.h,该文件的绝对路径是/usr/abc/A/a.h.

您可以:

  1. 添加具有所需头文件的目录作为 pre-processor 查找的一部分。不同的编译器有不同的方法来实现这一点。
  2. 将头文件添加为相对路径。例如。 #include "../folderName/A.h"
  3. 合并 1. 和 2. 在搜索路径中添加顶级目录并将文件包含为 #include "topLevelDirectory/A.h"

我个人不喜欢 2. 因为如果您的文件层次结构发生变化,您将不得不修改源代码以更改相对路径。