相关疑难解决方法(0)

预编译标题

我有一个示例项目(不是我的)在Visual C++ 6中.我正在尝试将其转换为Visual Studio 2008.

旧项目使用预编译头.现在的问题是:

  1. 什么是预编译头文件?

  2. 由于旧项目使用预编译头.我还将在Visual Studio 2008(新项目)中使用它们.但我得到的错误是"你忘了包含stdafx.h",为了解决这个问题,我在每个源文件中加入了"stdafx.h".这非常有效.但是旧项目在每个文件中都没有包含"stdafx.h"?那么如何选择退出在每个源文件中包含"stdafx.h".因为不是每个源文件都需要"stdafx.h"中定义的包含文件,所以只有少数文件.怎么做的?

编辑: 如何使用预先设定的标题来解释某些文件?

visual-c++-6 precompiled-headers visual-studio-2008

31
推荐指数
2
解决办法
2万
查看次数

Visual C++预编译标头错误

更新:

在我的头文件中包含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)

有谁知道发生了什么?

c++ header precompiled-headers visual-studio visual-c++

15
推荐指数
2
解决办法
1万
查看次数