包含来自不同目录的头文件?

问题描述:

我正在一个项目上工作,我不知道该如何从其他目录导入文件。下面是我的一些文件进行组织:包含来自不同目录的头文件?

-stdafx.h 
-core/ 
-->renderer.cpp 
-shapes/ 
-->sphere.h 
-->sphere.cpp 

如何访问从core/renderer.cppstdafx.hshapes/sphere.h

+0

你使用什么编译器? – 2011-12-23 23:25:29

+0

Microsoft Visual Studio 2010 – 2011-12-23 23:26:04

+0

请谨慎使用以下建议来使用'../'表示法。请参见[头文件的相对路径有什么好处](http://stackoverflow.com/questions/597318/)。 – 2011-12-24 05:58:52

有很多方法。例如,您可以使用#include "../stdafx.h"。更常见的是将项目的根添加到包含路径并使用#include "shapes/sphere.h"。或者在包含路径中有一个单独的包含标题的目录。

+0

我该如何添加一个根? – 2011-12-23 23:31:05

+0

它在设置中的某处。正如Dave指出的那样,这是'/ I'选项,但是你要找的东西可能是项目设置中的东西,或者它所谓的东西,有一段时间没有看到Visual Studio。 – 2011-12-23 23:33:56

您可以使用相对路径:

#include "../stdafx.h" 
#include "../shapes/sphere.h" 

或者加入你的项目目录,以你的编译器包含路径和参考他们像正常:

#include "stdafx.h" 
#include "shapes/sphere.h" 

可以使用/Icommand line option添加路径或在您的项目设置中设置路径。

+0

如何添加项目目录?对不起,我是新来的C++ – 2011-12-23 23:32:05

+0

我没有Visual Studio了(大约一年左右我没有使用它)。但是,** [本页](http://www.steptools.com/support/stdev_docs/help/settings_vc10.html)**有一个屏幕截图,可准确显示路径应添加到项目设置中的位置。 – 2011-12-23 23:43:36

这样做的一个(坏)方法是在头文件中加入一个相对路径,作为#include行的一部分。例如:

包括“页眉/ myHeader.h”

包括“../moreHeaders/myOtherHeader.h”

这种方法的缺点是,它需要你反映你的目录结构你的代码。如果你更新你的目录结构,你的代码将不再工作。

一个更好的方法是告诉你的编译器或IDE你在一些其他位置有一堆头文件,这样当它在当前目录中找不到它们时,它会看到它。这通常可以通过在IDE项目设置中设置“包含路径”或“搜索目录”来完成。

在Visual Studio中,您可以在解决方案资源管理器中右键单击您的项目,然后选择“属性”,然后选择“VC++目录”选项卡。从这里,你会看到一个名为“包含目录”的行。在那里添加你的包含目录。

在Code :: Blocks中,转到Project菜单并选择“Build Options”,然后选择“Search directories”选项卡。在那里添加你的包含目录。

使用g ++,可以使用-I选项来指定备用包含目录。

G ++ -o主要-I /来源/包括main.cpp的

这种方法的好处是,如果你改变你的目录结构,你只需要改变单一的编译器或IDE设置而不是每个代码文件。