如何包含来自不同文件夹的不同 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
.
您可以:
- 添加具有所需头文件的目录作为 pre-processor 查找的一部分。不同的编译器有不同的方法来实现这一点。
- 将头文件添加为相对路径。例如。
#include "../folderName/A.h"
- 合并 1. 和 2. 在搜索路径中添加顶级目录并将文件包含为 #include
"topLevelDirectory/A.h"
我个人不喜欢 2. 因为如果您的文件层次结构发生变化,您将不得不修改源代码以更改相对路径。
我有一个 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
.
您可以:
- 添加具有所需头文件的目录作为 pre-processor 查找的一部分。不同的编译器有不同的方法来实现这一点。
- 将头文件添加为相对路径。例如。
#include "../folderName/A.h"
- 合并 1. 和 2. 在搜索路径中添加顶级目录并将文件包含为 #include
"topLevelDirectory/A.h"
我个人不喜欢 2. 因为如果您的文件层次结构发生变化,您将不得不修改源代码以更改相对路径。