尽管已指定include目录,但Visual Studio在编译期间无法找到头文件

时间:2013-07-18 06:06:10

标签: c++ visual-studio-2010

添加我正在使用的库的include目录后。 Visual Studio 2010能够找到我在源代码中包含的头文件(IntelliSense没有显示任何错误)。但是,在构建解决方案时,它告诉我它无法找到头文件。我以前的项目中使用的相同属性不会发布此问题。

我现在唯一的解决方案是使用该库中所有头文件的直接地址,但我觉得这样做很烦人,因为库的头文件相互引用并且它没有感觉编辑所有这些。

有谁知道造成这个问题的原因是什么?

3 个答案:

答案 0 :(得分:1)

与编译器和放大器相比,IntelliSense在搜索包含文件时使用略有不同的算法。连接。特别是,即使没有正确指定包含目录,它也可以(有时)找到头文件。

我假设您正确指定了包含目录。

一个想法:Visual Studio 2010中存在一个错误,如果您指定了一个根路径(例如\myproject\includes),那么在构建解决方案时,VS会使用安装它的驱动器(通常是C :)而不是比解决方案所在的驱动器。如果是这种情况,您必须指定驱动器(例如D:\myproject\includes)或使用相对路径(例如..\..\myproject\includes)。

答案 1 :(得分:1)

这可能是因为您在2个目录中有源+标题引用了彼此的头文件。即文件是

 1/a.c  
 1/a.h
 2/b.c
 2/b.h

和a.c和b.c的内容具有相同的包含

 #include "a.h"
 #include "b.h"

您的项目在编译a.c时可以找到a.h,并且在编译b.c时可以找到b.h(因为在#include "xxx"中使用双引号时,在搜索路径中假定了相同的目录)。但是a.c找不到b.h,b.c默认找不到a.h.您的项目可能位于目录1中,您可能已设置了include目录以查看2。这工作正常,直到2 / b.c需要包含“a.h”。您需要设置包含1以及2的包含目录路径,即使1是您的原始项目目录,这样做似乎很愚蠢。

这就是为什么IntelliSense可以打开文件(因为它无所不知),但编译器不能(因为它一次只查看一个文件)。

答案 2 :(得分:1)

似乎实际问题是由于我没有在项目中添加include目录而引用正在实现库的项目。 这解释了为什么我可以自己构建引用的项目,并且只在我整体编译解决方案时遇到问题。

我觉得这很愚蠢,要求我们在引用项目中重新声明包含目录时我们已经在引用的项目中这样做了