如何包含不同文件夹中的不同标头

How to include different headers from different folders?

本文关键字:文件夹 何包含      更新时间:2023-10-16

我有一个C++项目,我喜欢有组织的mycode,但当我把所有东西都放在单独的目录中(头文件和源文件放在一起)时,我无法包含另一个文件夹中的头文件。例如:我有两个名为"FooException"answers"ContentProvider"的类,它们显然分到不同的目录中,FooException是一个异常,ContentProvider是一个实用程序。当然,我把它们放在不同的文件夹中,但当我试图在ContenProvider中包含FooException时,它不起作用,并说它找不到源文件。有人遇到过这样的问题吗?有什么建议吗?提前感谢,新年快乐!

UPD:好吧,人们建议看看#include<>之间的区别和#include",但这仍然没有帮助。尽管我可以从Main.cpp访问任何文件,但无论我使用哪个#include语句,我都无法访问ContentProvider类或FooException类中的文件。此外,无论我使用哪种语句,我都可以从项目的任何一点访问SFML库。这与SFML目录在我的项目中的"include"-目录中有关吗?

更新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. 添加具有所需头文件的目录,作为预处理器查找的一部分。不同的编译器有不同的方法来实现这一点
  2. 将头文件添加为相对路径。例如#include "../folderName/A.h"
  3. 联合收割机1。和2。在搜索路径中添加一个顶级目录,并将文件包含为#include "topLevelDirectory/A.h"

我个人不喜欢2。因为如果您的文件层次结构发生了更改,则必须修改源代码才能更改相对路径。