无法在Visual Studio中打开包含文件

31

我最近从Code::Blocks切换到了Visual Studio,在Code::Blocks中,你可以添加一个类然后立即包含它。但是,每当我在Visual Studio中使用以下语句执行相同的操作时:

#include "includedFile.h"
或者
#include "include/includedFile.h"

它不能工作,反而出现了以下错误:

无法打开包含文件:'includedFile.h';没有那个文件或目录。

我需要勾选一些框或设置吗?或者我需要手动将每个头文件添加为依赖项?

这是有问题的类的代码:

Public.h:

    #pragma once
    class Public
    {
        public:
            static const int SCREEN_WIDTH=1000;
            static const int SCREEN_HEIGHT=1250;
            Public(void);
            ~Public(void);
    };

Public.cpp:

    #include "Public.h"


    Public::Public(void)
    {
    }


    Public::~Public(void)
    {
    }

如何进行包含:

    #include "Public.h"

请查看此评论https://dev59.com/FmIk5IYBdhLWcg3wTcYr#31730081,应将其标记为正确的解决方案。 - AZ_
1
请检查配置和平台(Debug/Release, Win32/x64)是否与您对解决方案属性(如"附加包含目录")所做的任何更改的配置和平台相匹配。 - Jiminion
9个回答

45

我曾经遇到了从gcc转移到visual studio进行C编程的同样问题。请确保你的include文件实际上在目录中,而不仅仅是在Visual Studio项目树中显示。对于其他语言,将文件复制到项目树中的文件夹中确实可以移动该文件。但是,在使用Visual Studio 2010时,将其粘贴到“头文件”中并没有把.h文件放在那里。

请检查实际目录中是否存在所需的include文件。将其放入项目/解决方案资源管理器中的“头文件”文件夹中是不够的。


43

进入项目属性(Project -> Properties -> Configuration Properties -> C/C++ -> General),在“附加包含目录”字段中添加您的 .h 文件路径。

确保您的配置和平台处于活动状态。例如:配置:活动(Debug) 平台:活动(Win32)。


1
尽管这不是问题中最可能的原因,但它是我的原因。 - Tyson Hilmer
如果您找不到项目->属性->配置属性->C/C++->常规,请确保项目中有一个cpp文件并进行构建(构建将失败,但会生成属性)。 - Tudor
2
活动配置是让我困扰的原因!我正在更改发布设置并进行调试编译(尽管我已经激活了Debug,但VS默认为Release)。您可能希望选择“所有配置”作为您的包含目录。 - OLP
1
那第二句话很关键!你是救命恩人...犯这样的愚蠢错误真是太傻了 :-P 谢谢!!! - Christian
我似乎找不到这个位置:( 你有什么提示或链接可以提供吗? - minh anh b
我浪费了大量的人力去更改Release配置时运行在Debug模式下(反之亦然)。如果VS能够给出一个小警告,我们现在可能已经开着飞行汽车了。 - Steve Smith

17

如果这些包含文件不在项目文件夹中,您需要设置预处理器搜索的路径。

您可以在项目设置中的 VC++目录附加包含目录 中设置路径。


13
它们在项目文件夹中,我已经将项目路径添加到两个目录中,但遗憾的是它不起作用。 - user2853108

16

默认情况下,Visual Studio会在项目所在的文件夹($ProjectDir)和默认的标准库目录中搜索头文件。如果您需要包含不放在项目目录中的内容,则需要将该文件夹的路径添加到包含路径中:

转到项目属性(Project -> Properties -> Configuration Properties -> C/C++ -> General),并在Additional Include Directories字段中添加.h文件的路径。

如Chris Olen所建议的那样,您还可以将路径添加到VC++目录字段中。


1
它们在项目文件夹中,我已经将项目路径添加到两个目录中,但遗憾的是它不起作用。 - user2853108
3
抱歉,这是不可能的。这是一个非常简单的操作,如果您输入了正确的路径,应该可以打开。如果它们在项目文件夹中,请不要添加项目路径 - 只需#include "file.h"即可。最后一件事情是右键单击项目->添加->新项目->头文件,然后将其包含进来,该文件将自动创建在项目目录中。如果还是不行,那么您的Visual Studio出了很大的问题。 - tomi.lee.jones
1
这是我的编辑。此外,我似乎在类的包含方面没有任何问题,只是在其他地方。 - user2853108
@user2853108 您说的“头文件所属类包含问题”是什么意思?请澄清。 - JBentley
1
确保文件实际上在您的include目录中,而不仅仅是在项目树中。将其粘贴到项目树中并没有真正将文件放入项目目录中! - Yablargo
显示剩余4条评论

8
我发现这篇文章是因为我在Microsoft Visual C++中遇到了相同的错误。(尽管它似乎与上面发布的问题有一点不同。)
我已经把我要包含的文件放在了同一个目录下,但仍然无法找到它。
我的包含代码看起来像这样:#include <ftdi.h> 但当我将其更改为#include "ftdi.h"时,它就被找到了。

这对我来说是解决方案。谢谢你!现在我想知道“<>”应该用于什么... - Jimmy
3
在我的看法中,<>符号用于系统文件,而引号则用于你项目中包含的文件。 - Joe
1
这是Visual Studio如何使用括号包含(<>)与引号包含("")的确切定义: https://learn.microsoft.com/en-us/cpp/preprocessor/hash-include-directive-c-cpp。 总结: 括号<>将严格遵循"包含目录"设置。 引号""也会执行"包含目录",但首先会搜索本地项目目录。 - cowlinator

3
如果你的问题仍然存在,那肯定是因为你试图编译一个与当前设置不同的版本。
例如,如果你在“Debug x64”中设置了你的“Additional Include Directories”,请确保你使用相同的配置进行编译。
检查这个:`Build > Configuration Manager... >` 可能会在你的活动解决方案配置中出现类似于此的问题:`Debug x86 (Win32) platform`。

非常感谢。这就是我的问题。在vc2008中,使用当前设置打开了设置对话框。 - Valentin H
我有与“Debug x64”相同的设置,但是Visual Studio仍然无法找到头文件。我还检查了所需头文件的位置是否已添加到附加包含目录中。 - Krishna Oza

3
对我而言,将项目当前目录链接如下是有帮助的:
在属性->C++->常规窗口中,不要将路径链接到"附加包含目录"中的文件。放入"."并取消选中"从父项或项目默认继承"。
希望这能有所帮助。

2
我也尝试了其他答案,但我的问题与包含路径或文件缺失的#include无关。我有两个配置,每个配置都设置了完全相同的包含目录。一个配置可以解决包含问题,而另一个则不能。
在选择项目并转到项目->属性后,我通过配置下拉菜单->多个配置...选项选择了两个配置。比较这两个配置,我发现C/C++ -> 语言 -> 符合模式不同。由于某种原因,“错误”的配置具有Default值,将其切换为YesNo即可解决路径问题。 TL;DR: 如果您有一个配置具有相同的包含目录,但另一个无法找到文件,则建议尝试比较配置。

0

如果你已经尝试了其他答案,但是你的包含文件仍然找不到,那么这里有一些额外的调试步骤和检查:

  • 确保你正在构建与你的代码支持的平台。 (如果不支持,请考虑将该平台从目标中删除)
  • 验证文件名/路径是否正确。修改你的源代码,用整个头文件的绝对路径进行#include,看看文件现在能否找到。如果不能找到,请将路径从源代码中复制粘贴到命令行中,以验证该完整路径下是否存在没有拼写错误的文件。打开头文件以确保你具有读取权限。(完成后请将源代码改回原样。)
  • 如果你已经将路径添加到Additional Include Directories,请尝试点击Additional Include Directories下拉组合框,并选择<Edit...>。这将显示路径的evaluated values。(如果它没有显示正确的evaluated values,你的路径中的变量可能未设置。点击Macros>>查看变量。)将评估的路径复制粘贴到Windows资源管理器中,以验证该路径是否存在。
  • 创建一个新的空的C++“Windows Console Application”项目。只设置一个Include Directory,在你的main.cpp中只#include一个文件,然后看看是否可以构建。

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