2012-10-22 87 views
3

我有收到编译错误(红色下划线)一样的问题:Visual Studio的C++能够与编译错误(红色下划线)编译

Error: cannot open source file "stdafx.h" 

这里环境的编辑的截屏:

Able to build with Compile Errors

在左边是我的Visual Studio解决方案目录列表关闭“显示所有文件”。

我正在一个学校项目上工作,每个文件夹都是项目不同部分的源文件,负责这些项目的不同人员。

例如,学生A和B都有AST和PARSER文件夹(我们称之为子项目)。 我们为每个子项目都有一个API,以便其他子项目知道要调用什么。

在TOP-CENTER中,我们有我的源文件QueryProcessor。 (只是前几行) 在它下面,是Build Success的输出。

红线遍布所有班级,主要造成#include "stdafx.h"无法打开的环境。

在右边,这就是我们包括所有不同的子项目stdafx.h因此我们要将具有不同的stdafx.h

然而,每个项目的麻烦,我能够构建项目。我很确定我正在做这个目录/链接错误。

+1

我是一个有点困惑通常的Visual Studio没有任何这样的子文件夹使用的#include“PKB/PKB.h”不应该工作。如果你使用显示所有文件并为它们创建目录,这将是正确的。为什么std是加下划线的,但仍然编译可能是因为其他一些类包含iostream。 AHHH现在我知道了你们创建子文件夹,但禁用显示所有文件,然后包含的文件到Visual Studio中的每个虚拟文件夹,不是吗? – 2012-10-22 10:57:18

+0

哦..我没有这样做,但我认为是这样。 – ali

+0

因此,我们需要在显示所有文件夹的同时包含文件?虚拟文件夹是什么意思? – ali

回答

1

这应该工作

  1. 右键单击解决方案文件
  2. 单击打开Windows资源管理器
  3. 查找文件stdfx.h在资源管理器和复制文件夹
  4. 的路径在Visual Studio解决方案资源管理器,右键点击项目文件
  5. 点击属性 - > C/C++ - >常规
  6. 在Additional Include Directori ES粘贴路径
+0

好的,我回来的时候检查一下。 – ali

1
  1. 合并文件夹和虚拟文件夹中的VC是从我的角度杂乱点,因为虚拟文件夹中表明,所有文件都在一个目录下,并在硬盘中创建的文件夹,显然表明,所有文件在不同的目录中。如果你知道发生了什么,你可以将它结合起来,但在你的情况下,我不会推荐它。

  2. 我假设你错过了stdafx.h的目的这个头文件的目的不是把所有的头文件放进去,然后把它包含到所有其他文件中。这里是关于这个的一个SO问题Purpose of stdafx.h

  3. 清理完stdafx.h文件后,包含许多头文件到你的。cpp文件,只有将这些包含在头文件中,如果它们在头文件中是必需的

  4. 打开显示所有文件,现在您将使用实际文件夹,并且可以确定,如果您将文件夹称为“ PKB“这个文件夹真的存在,因为你可以在左边的解决方案资源管理器中看到它。

  5. 如果使用using namespace std;例如,确保你还包含所需的头文件。你可能会认为“嘿,我已经在另一个头文件中包含了例如iostream,我现在包含在这个头文件中,所以我不需要它”当你处理更大的项目时,这真的会毁掉你。

哦,关于stdafx.h中,只要你切换到显示我想你会发现,stdafx是在不同的文件比在您使用的包含文件中的所有文件,包括问题。可能需要类似#include "..\stdafx.h"(取决于您的结构)。

我认为这很明显,但是如果包含一个头文件,那么include就是相对于包含另一个头文件的文件而言。

1

stdafx.h通常用于创建预编译头,这本质上是编译时优化,因此编译器不会为每个编译单元不断地编译这些头。

如果这些标题中的任何一个发生了变化,您将需要执行完整的系统重建。

在现实中,它是唯一最好使用它来包括标准头加,你是不是永远不会改变第三方头(如Boost库和类似)。

你可能会认为你自己的一些图书馆是“一石二鸟”,也可以包括在内。

每一个项目,即内置于一个单独的单元(DLL或.exe)应该有自己的预编译的头和它自己的stdafx.h版本

项目应仅包括该项目的每一个部分的自己.stdafx而不是其他项目的,因此这个头文件也可以用来定义你的dllexport宏。

安排项目标题时,您应该注意: 1.哪些标题包含在外部 2.哪些标题只包含在内部,甚至不包括在内部间接包含。

后一种情况应该包括你的stdafx.h文件,理想情况下应该不在你的项目外部包含的那些头文件中。