Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;需要包括许多目录上的标题_C++_Header Files_Organization_Code Organization - Fatal编程技术网

C++ C++;需要包括许多目录上的标题

C++ C++;需要包括许多目录上的标题,c++,header-files,organization,code-organization,C++,Header Files,Organization,Code Organization,在2D terraria/Minecraft风格的游戏中,我有以下文件夹结构: src/ - Backend/ - - Vector.hpp - World/ - - Elements/ - - - Mobs/ - - - - BaseMob.cpp 正如您所猜测的,每个目录中都有更多的源文件。在BaseMob.cpp内部,我需要访问src/Backend/Vector.hpp有没有更干净的方法来编写#include“../../../Backend/Vector.hpp”(即#include

在2D terraria/Minecraft风格的游戏中,我有以下文件夹结构:

src/
- Backend/
- - Vector.hpp
- World/
- - Elements/
- - - Mobs/
- - - - BaseMob.cpp
正如您所猜测的,每个目录中都有更多的源文件。在
BaseMob.cpp
内部,我需要访问
src/Backend/Vector.hpp
有没有更干净的方法来编写
#include“../../../Backend/Vector.hpp”
(即
#include“/Backend/Vector.hpp”
)或者更好的方法来组织我的源文件夹中的文件?

以下是有关源文件夹中实际内容的更多信息(不包括大多数
.cpp
文件):


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

干净的方法是将所需的文件夹(存储所需头文件的文件夹)添加到编译器使用的“includes path”中,以便编译器可以找到它们

然后,将
#include“World/Elements/Mobs/BaseMob.hpp”
添加到include路径中,而不是
#include“BaseMob.hpp”

  • 例如,如果您使用gcc:
  • 对于Visual studio:

如果使用不同的编译器/IDE,它必须提供一个选项来执行该操作。

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

干净的方法是将所需的文件夹(存储所需头文件的文件夹)添加到编译器使用的“includes path”中,以便编译器可以找到它们

然后,将
#include“World/Elements/Mobs/BaseMob.hpp”
添加到include路径中,而不是
#include“BaseMob.hpp”

  • 例如,如果您使用gcc:
  • 对于Visual studio:

如果您使用不同的编译器/IDE,它必须提供这样做的选项。

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

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


通过告诉编译器在何处搜索,您可以将文件包括在任何地方,并且可以移动,而无需更改源代码。

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

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


通过告诉编译器在何处搜索,您可以将文件包括在任何地方,并且可以移动,而无需更改源代码。

您可以使用生成文件或更改系统路径。以最合乎逻辑的方式组织文件,然后遵循一致的规则引用它们。例如,谷歌IIRC推荐绝对路径而不是相对路径。如果你经常移动文件是有意义的,我更喜欢平衡,可能是相对于其余绝对值的上下一级…我可能会做
#包括“Backend/Vector.hpp”
,但这取决于具体情况。你可以使用makefile或更改系统路径。以最合理的方式组织文件,然后坚持引用它们的一致规则。例如,谷歌IIRC推荐绝对路径而不是相对路径。如果你经常移动文件是有意义的,我更喜欢平衡,可能是相对于其他绝对值上下一级…我可能会做
#包括“Backend/Vector.hpp”
,但这取决于具体情况。建议加入一个像
#包括“World/Elements/Mobs/BaseMob.hpp”这样的例子
只是为了完整性。建议加入一个像
#include“World/Elements/Mobs/BaseMob.hpp”这样的例子,只是为了完整性。但这不也会打开一罐蠕虫吗?通过使用-I,“World/Renderer.hpp”和Menu/Renderer.hpp不会产生问题吗?是的,不适用于不同目录中具有相同名称的文件。但是,我通常有唯一的文件名,例如
menurender.hpp
worldrender.hpp
,所以我没有这个问题。但是这不也会打开一罐蠕虫吗?通过使用-I,“World/Renderer.hpp”和Menu/Renderer.hpp不会产生问题吗?是的,不适用于不同目录中具有相同名称的文件。但是,我通常有唯一的文件名,例如
menurender.hpp
worldrender.hpp
,所以我没有这个问题。
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