我遇到了编译错误(红色下划线)的问题,如:
Error: cannot open source file "stdafx.h"
这是一个经过编辑的环境截图:
在LEFT上是我的Visual Studio解决方案目录列表,其中显示“显示所有文件”。
我正在开展一个学校项目,每个文件夹都是项目不同部分的源文件,由不同的人负责。
例如,学生A和B是AST和PARSER文件夹(我们称之为子项目)。 我们为每个子项目都有一个API,以便其他子项目知道要调用什么。
在TOP-CENTER,我们有一个类QueryProcessor
的源文件。 (只是前几行)
在它下面是Build Success
的输出。
红线遍布所有类,主要是因为环境无法打开#include "stdafx.h"
。
在右边,那是我们包含所有不同子项目的stdafx.h
,所以我们省去了每个项目有不同stdafx.h的麻烦
但是,我能够构建项目。我很确定我正在做这个目录/链接错误。
答案 0 :(得分:1)
这应该有效
答案 1 :(得分:1)
在VC中组合文件夹和虚拟文件夹是我的观点,因为虚拟文件夹指示所有文件都在一个目录中,并且在硬盘驱动器上创建的文件夹显然表明所有文件都在不同的目录中。如果你知道发生了什么,你可以把它结合起来但在你的情况下我不推荐它。
我假设您错过了stdafx.h的目的。此头文件的目的不是将所有标题文件放入其中,然后将其包含在所有其他文件中。以下是关于此Purpose of stdafx.h
清理stdafx.h文件后,在.cpp文件中包含尽可能多的头文件,如果头文件中需要这些文件,则只将这些文件包含在头文件中
打开显示所有文件,现在您将使用实际文件夹,并且您可以确定如果您在“PKB”这样的文件夹中找到该文件夹确实存在,因为您可以在左侧解决方案资源管理器中看到它。
如果使用namespace std;例如,确保您还包含所需的头文件。您可能会认为“嘿,我已经将iostream包含在另一个头文件中,我现在将其包含在此头文件中,因此我不需要它”当您处理更大的项目时,这将真正摧毁您。
哦,关于stdafx.h包含问题,只要你切换到显示所有文件,我假设你会发现stdafx与你使用include的文件不同。可能需要#include "..\stdafx.h"
之类的东西(取决于你的结构)。
我认为这是显而易见的,但是如果你包含一个头文件,那么include就是相对于包含另一个头文件的文件而言。
答案 2 :(得分:1)
stdafx.h
通常用于创建预编译头,它实质上是编译时优化,因此编译器不会为每个编译单元不断地编译这些头。
如果其中任何标题发生变化,您将需要进行完整的系统重建。
实际上,最好只使用它来包含标准标题和第三方标题(如boost库和类似标题),而这些标题你永远不会改变。
您可能会认为您自己的某些图书馆“一成不变”,也可以包括在内。
每个项目,即构建在单独单元(DLL或.exe)中的项目的每个部分都应该有自己的预编译头和它自己的stdafx.h版本
项目只应包含自己的.stdafx而不包含其他项目的项目,因此此头文件也可用于定义dllexport宏。
在安排项目标题时,您应该注意: 1.外部包含哪些标头 2.哪些标题仅包含在内部,甚至不在外部间接包含。
后一种类型应该包含您的stdafx.h文件,理想情况下不应该与项目外部包含的那些头文件位于同一目录中。