VISUAL C ++预编译头错误(Visual C++ Precompiled Headers e

2019-08-04 09:51发布

更新:

什么是包括在我的头文件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>
...

我stdafx.cpp

#include "stdafx.h"

在每一次的.h和.cpp文件,我有以下几点:

#pragma once //if in a header file
#include "stdafx.h"

对于发布和调试,我有“创建预编译头(/ YC)”。 它以调试方式编译罚款,但在发布模式下它保持报告

error LNK2005: ___@@_PchSym_@00@UfhvihUaszlaDUwlxfnvmghUnnlUhixUnnlPeDUnnlPeDUivovzhvUvmgrgbOlyq@ already defined in A.obj

如果我切换既可以“使用预编译头”,我得到了Debug和Release

fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file:

有谁知道这是怎么回事?

Answer 1:

你把“创建预编译头”只为stdafx.cpp。 那么,“使用预编译头”所有其他“的.cpp”文件。 最后,有include "stdafx.h"在每一个“的.cpp”文件的开始(通常不会在头文件。



Answer 2:

/Yc编译器选项用于创建一个编译动作的预编译的头。 该/Yu选项指示编译器使用预编译头。

你将永远使用/Yu项目的设置选项。 在属性页为您stdafx.cpp文件时, /Yc选项进行设置。

要明白,有针对每个单独的编译选项是非常重要.cpp文件。

见这里的的/ Y选项的详细信息。



Answer 3:

你把#pragma once在之前#include "stdafx.h"我认为这是导致编译器忽略#pragma once指令。

另外,我不认为你应该把#include "stdafx.h"行成的头文件在所有。



Answer 4:

使用“stdafx.h中”的结果不预编译头系统的影响。 如果关闭创建PCH /使用PCH,代码编译,并创建了相同的输出,但它这样做慢。 这也是为什么你可以移植的代码使用它(不像#pragma once



文章来源: Visual C++ Precompiled Headers errors