我有一个示例项目(不是我的)在Visual C++ 6中.我正在尝试将其转换为Visual Studio 2008.
旧项目使用预编译头.现在的问题是:
什么是预编译头文件?
由于旧项目使用预编译头.我还将在Visual Studio 2008(新项目)中使用它们.但我得到的错误是"你忘了包含stdafx.h",为了解决这个问题,我在每个源文件中加入了"stdafx.h".这非常有效.但是旧项目在每个文件中都没有包含"stdafx.h"?那么如何选择退出在每个源文件中包含"stdafx.h".因为不是每个源文件都需要"stdafx.h"中定义的包含文件,所以只有少数文件.怎么做的?
编辑: 如何使用预先设定的标题来解释某些文件?
更新:
在我的头文件中包含stdafx.h有什么影响?
我开始使用Linux/Eclipse CDT中的C++项目并将其导入Visual C++/Windows.
在Visual C++中,我开始使用预编译头来加速编译,并定义了stdafx.cpp和stdafx.h.
这是我的stdafx.h
#pragma once
#include <string>
#include <vector>
#include <map>
...
Run Code Online (Sandbox Code Playgroud)
和我的stdafx.cpp
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
在每个.h和.cpp文件中,我有以下内容:
#pragma once //if in a header file
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
对于发布和调试,我都有"创建预编译头(/ Yc)".它在调试模式下编译良好,但在发布模式下它保持报告
error LNK2005: ___@@_PchSym_@00@UfhvihUaszlaDUwlxfnvmghUnnlUhixUnnlPeDUnnlPeDUivovzhvUvmgrgbOlyq@ already defined in A.obj
Run Code Online (Sandbox Code Playgroud)
如果我同时切换到"使用预编译头",我会进入Debug和Release
fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file:
Run Code Online (Sandbox Code Playgroud)
有谁知道发生了什么?