C++需要包含许多目录的标头

C++ need to include headers many directories up

本文关键字:包含许 C++      更新时间:2023-10-16

我在2D泰拉瑞亚/我的世界风格的游戏中有以下文件夹结构:

src/
- Backend/
- - Vector.hpp
- World/
- - Elements/
- - - Mobs/
- - - - BaseMob.cpp

正如您所猜测的,每个目录中还有更多的源文件。在BaseMob.cpp里面我需要访问src/Backend/Vector.hpp.有没有更干净的方法来写#include "../../../Backend/Vector.hpp"(即。 #include "/Backend/Vector.hpp" )还是更好的方法来组织源文件夹中的文件?

下面是有关源文件夹中实际内容的详细信息(大多数.cpp文件被排除在外):

Backend/ # Anything specific to a particular platform
- Vector.hpp
- Graphics.hpp
World/ # Anything about the whole game's world
- Elements/
- - Mobs/
- - - BaseMob.hpp # Polymorphic base class
- - - MobHandler.hpp # Manages all mobs in world
- - - PlayerMob.hpp
- - - WaterMob.hpp
- - Block.hpp # Defines all possible blocks
- - Inventory.hpp
- - Furnace.hpp
- World.hpp
- WorldRenderer.hpp # Makes calls to Backend/graphics.hpp
main.cpp

您可以考虑重新组织包含文件夹。这是一个可能的解决方案,但可能还不够:当您开始使用第三方库时,您将无法做到这一点......所以你需要一个更好的方法来解决这个问题。

干净的方法是将所需的文件夹(存储所需头文件的文件夹)添加到编译器使用的"包含路径"中,以便可以找到它们。

然后,而不是 #include "World/Elements/Mobs/BaseMob.hpp" ,您将World/Elements/Mobs添加到包含路径,然后简单地执行#include "BaseMob.hpp"

  • 例如,如果您使用 gcc:如何在 linux 中添加 gcc 的默认包含路径?
  • 对于Visual Studio
  • :包含路径如何在Visual Studio中工作?...

如果使用其他编译器/IDE,则必须提供执行此操作的选项。

我建议不要在 #include 语句中放置路径。 如果文件移动,则必须更改所有源。

IMO,更好的方法是告诉编译器在哪里查找包含文件。 常见的命令行编译器选项是"-I"(大写字母 i)。 在 IDE 中,可能有一个设置,您可以在其中列出要搜索的所有路径。

通过告诉编译器在哪里搜索,您可以包含的文件可以在任何地方并且可以移动,并且不必更改源代码。