3

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

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

有谁知道是什么导致了这个问题?

4

3 回答 3

2

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

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

并且 ac 和 bc 的内容具有相同的包含

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

你的工程在编译ac的时候可以找到ah,在编译bc的时候可以找到bh(因为在使用双引号的时候,搜索路径假定同一个目录#include "xxx")。但是ac默认找不到bh,bc默认也找不到ah。您的项目可能在目录中1,并且您可能已经设置了包含目录以查看2. 在 2/bc 需要包含“ah”之前,它可以正常工作。您需要将包含目录路径设置为 include1以及2,即使1是您的原始项目目录,这样做似乎很愚蠢。

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

于 2013-07-18T06:49:14.940 回答
1

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

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

\myproject\includes一个想法:Visual Studio 2010中存在一个错误,如果您指定根路径(例如 . . 如果是这种情况,您必须指定驱动器(例如D:\myproject\includes)或使用相对路径(例如..\..\myproject\includes)。

于 2013-07-18T06:32:37.900 回答
1

似乎实际问题是由于我没有在项目中添加包含目录,该目录引用了正在实施库的项目。这解释了为什么我可以自己构建引用的项目,并且只有在我将解决方案作为一个整体编译时才会出现问题。

当我们已经在引用项目中这样做时,我发现要求我们在引用项目中重新声明包含目录是相当愚蠢的

于 2013-07-19T01:45:45.453 回答