2011-09-18 54 views
0

我来自Java/AS3/Javascript背景,我的所有类都组织成可帮助表示其功能的包。文件系统上的C++组织

在开始一个C++项目时,我试图以大致相同的方式来模仿这个文件系统结构,但是我一直在考虑include的问题。

目前我有一个src目录,里面有main.cpp文件。然后我有一些根目录和里面的其他文件。这里有一个例子:

SRC

- > main.cpp中

- >窗口

---->在window.h

----> Window.cpp

main.cpp包含Window.h,语句为#include“Window.h”,一切都很好。但是,如果我重新启动Visual Studio,它会抱怨它找不到“Window.h”。

在寻找一个开源项目,我看到一些只是在一个目录中没有嵌套的所有源文件,以方便包括我想。有些将头文件和cpp文件分开。

在文件系统上组织一个大型的C++项目的正确方法是什么(或者至少会导致更少的麻烦)?

谢谢!

+0

您的目标是合理的。您只需要为项目正确设置包含路径。 如果您有一个包含多个文件夹的项目,您应该可以执行'#include Window \ window.h' – Chad

+1

“Window.h”!= 。引号意味着,他有项目头文件名为“窗口”,而不是Windows头文件。 –

+0

对不起,可能可以使用一个不太令人困惑的例子。 Window.h和Window.cpp是我为包装Window功能所做的自定义类。 Window.h包含用于访问MS Windows代码的。 – Jon

回答

1

像你试图做的那样分手是合理和容易完成的。

您只需要设置项目的包含路径。从Visual Studio中,右键单击项目名称,然后单击“属性”。从那里,在左侧的树形控件中,展开“C/C++”,然后在树中选择“常规”。右侧的第一个选项应该是“其他包含目录”。

有你有几种选择:

您可以指定特定的include目录(用分号分隔)。举例来说,如果你有文件夹“窗口”和“打印”你可以把在:

..\Window;..\Printing

这样可以让你轻松地包括窗口和打印文件,像这样:

#include <Window.h>  // from src/window 
#include <Printing.h> // from src/printing 

上述方法有一些缺点,因为您可能很容易与您可能正在使用的其他库中的名称发生冲突,因此使include命令非常重要。

一个更好的方法(在我看来)是增加以下内容作为一个包含路径:

..\

这将使搜索的父目录寻找包括当。这可以让你在包含路径中更加详细,如下所示:

#include <Window/Window.h>  // it's more clear where these are coming from 
#include <Printing/Printing.h> // and much less likely to collide with other library 
           // header files 
+0

谢谢!这有助于解决找不到文件的问题。 – Jon

+0

没问题。更改这些值时的警告快照,默认情况下,只会针对当前活动的平台(x64,x64等)和配置(调试,发布等)更改它们。更改这些选项时,您可以指定多个配置/平台等。 – Chad

0

遵循Java示例并通过C++名称空间排列源文件是有意义的。在您的/src目录下创建与命名空间相对应的子文件夹。