致命错误C1083:无法打开包含文件:'xyz.h':没有那个文件或目录?

27

我正在使用Visual Studio 2005创建一个项目。该项目中有一个名为code的文件夹,其中包含所有*.cxx文件。

现在,我在头文件xyz.h中创建了一个名为xyz的类,并在位于code文件夹中的xyz.cxx中定义了所有内容。但是,当我尝试使用Visual Studio编译它时,它会抛出一个错误:“致命错误C1083:无法打开包括文件:'xyz.h':没有那个文件或目录”。如何纠正这个问题?


2
xyz.h文件和xyz.cxx文件相对于项目的位置在哪里? - David Alber
你的头文件和代码在同一个文件夹里吗? - Kevin
3
你是使用 #include <xyz.h> 还是 #include "xyz.h" - In silico
@DavidAlber 不,它不是相对的。 - Apoorva sahay
@Kevin,不是开尔文(Kelvin),是这样的。我有一个项目文件夹,在其中有一个名为code的文件夹和一个名为xyz.h的文件。在code文件夹中,我有一个名为xyz.cxx的文件。我正在xyz.cxx中使用#include "xyz.h"。 - Apoorva sahay
我的意思是 xyz.hxyz.cxx 在同一个目录中,或者在项目配置的包含文件查找位置中? - David Alber
5个回答

21
将 "code" 文件夹添加到 Visual Studio 项目属性中。
项目->属性->配置属性->C/C++->附加包含目录。

是的,你说的没错,但这只能在本地解决问题。如果我在其他系统中使用相同的项目,我还需要再做一次。 - Apoorva sahay
3
我认为你在考虑“工具”- >“选项”- >“项目和解决方案”- >“VC++目录”- >“包含文件”?更改该设置仅适用于您修改的Visual Studio实例。Holger建议的设置存储在vcproj文件中,因此当您将项目移动到另一个系统时,该设置也会随之移动。 - Frank Boyne

16

要么将xyz.h文件移动到其他位置,以便预处理器可以找到它,要么更改#include语句,以便预处理器可以在其已经存在的位置找到它。

预处理器寻找包含文件的位置在这里有描述。一种解决方案是将xyz.h文件放在一个文件夹中,在遵循该搜索模式时,预处理器将找到它。

或者,您可以更改#include语句,以便预处理器可以找到它。您告诉我们xyz.cxx文件位于“code”文件夹中,但您没有告诉我们您将xyz.h文件放在哪里。假设您的文件结构如下...

<some folder>\xyz.h
<some folder>\code\xyz.cxx

在这种情况下,xyz.cxx中的#include语句应该类似于以下内容。
#include "..\xyz.h"

另一方面,假设您的文件结构如下...
<some folder>\include\xyz.h
<some folder>\code\xyz.cxx

在这种情况下,xyz.cxx中的#include语句应该类似于这样。
#include "..\include\xyz.h"

更新: 另一方面,正如评论中@In silico所指出的那样,如果您正在使用#include <xyz.h>,您应该将其更改为#include "xyz.h"


1
使用正斜杠怎么样?反斜杠不只兼容Windows吗? - Aaron Franke

6

我在另一种情况下遇到了这个错误,并为那些通过搜索到达这里的人发布解决方法:从Visual Studio中,我将一个文件从一个项目复制并粘贴到另一个项目。结果发现这创建了一个符号链接,而不是实际的副本。因此,该项目无法在当前工作目录中找到该文件。当我在Windows资源管理器中进行物理复制时,#include "myfile.h" 突然起作用了。


你能多提供一些细节吗?我也遇到了一个复制工作的情况,但我是C#开发人员,对C++还不熟悉。 - Max Eisenhardt
关键在于我当时在Visual Studio中使用解决方案资源管理器进行复制和粘贴。这只是创建了一个符号链接。相反,我必须打开Windows资源管理器才能正确地复制和粘贴头文件。 - sfuqua
有什么想法为什么这个有效,如何在不改变源代码的情况下解决它? - tresf
我自2011年参与一个项目以来就没有再使用过C++,而且我不知道当前的Visual Studio是否具有相同的行为。但是关键教训是:项目文件中的符号链接是不够的,需要实际拷贝文件。 - sfuqua

1
这个问题可以通过安装以下个别组件轻松解决:

enter image description here


0

以下方法对我很有帮助。

步骤:

1.进入缺少头文件的相应目录(在我的情况下,../include/unicode/coll.h)并复制头文件所在的目录位置。(只需复制到include目录。)

2.在“解决方案资源管理器”中右键单击您的项目->属性->配置属性->VC++目录->包含目录。将复制的路径粘贴到这里。

3.这样就解决了我的问题。希望能对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接