更新
在我的头文件中包含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:
有谁知道发生了什么事?
答案 0 :(得分:30)
您只为stdafx.cpp添加“create precompiled header”。然后为所有其他“.cpp”文件“使用预编译头”。最后,在每个“.cpp”文件的开头都有include "stdafx.h"
(通常不在头文件中。
答案 1 :(得分:6)
/Yc
编译器选项用于为编译操作创建预编译头。 /Yu
选项指示编译器使用预编译的头。
您将始终在项目设置中使用/Yu
选项。
在stdafx.cpp
文件的属性页中,将设置/Yc
选项。
重要的是要了解每个.cpp
文件都有单独的编译选项
有关/ Y选项的详细信息,请参阅here。
答案 2 :(得分:4)
您将#pragma once
放在#include "stdafx.h"
之前,我认为这会导致编译器忽略#pragma once
指令。
另外,我认为你根本不应该将#include "stdafx.h"
行放入头文件中。
答案 3 :(得分:1)
使用“stdafx.h”的结果不受PreCompiled Header系统的影响。如果关闭Create PCH / Use PCH,代码将编译并创建相同的输出,但速度较慢。这也是您可以在便携式代码中使用它的原因(与#pragma once
不同)