【问题标题】:Best way to include stdafx.h, when it is 1 directory up?包含stdafx.h的最佳方式,当它是1个目录时?
【发布时间】:2015-03-14 06:04:25
【问题描述】:

想象一下以下源文件:

src/StdAfx.h
src/moresrc/MyFile.cpp

MyFile.cpp 中,我需要包含预编译的头文件StdAfx.h。

如果我这样做:

#include "../StdAfx.h"

然后我会得到编译器错误:

warning C4627: '#include "../stdafx.h"': skipped when looking for precompiled header use
fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?

所以这行不通。如果我这样做了

#include "StdAfx.h"

然后编译正确,但我在 Visual Studio 2013 中突出显示恼人的错误,如下所示:

所以,就像我说的,这可以编译,但很烦人。

如何在没有下划线的情况下包含“StdAfx.h”,但这样它才能编译?

【问题讨论】:

  • 向 Microsoft 提交错误报告? ;)
  • 我建议您不要使用预编译头文件并从项目中删除 stdafx.h。除非您有一个庞大的项目,否则预编译头文件所节省的时间不会超过它带来的麻烦,就像您面临的问题一样。
  • 预编译的头文件应该可以节省时间,但如果其中一个头文件发生变化,则需要执行预编译过程。想法是将稳定的头文件放入“预编译”部分,将易失的头文件放在外面。
  • 红色波浪下划线位于#include 下方,而不是标题名称下方。如果我没记错的话,您可以右键单击或将鼠标悬停在下划线上以查看它在抱怨什么。以小写形式提供标题名称会有所不同吗?
  • 同样的问题似乎在这里得到了回答:stackoverflow.com/questions/12434123/…

标签: c++ visual-studio stdafx.h


【解决方案1】:

您可以将$(ProjectDir)(项目根目录)添加到项目选项中的目录列表(C++ -> 常规 -> 附加包含目录)。然后,您将能够在包含中指定相对于项目根目录的路径。例如,如果您有utils/a.h 并想从foo/bar/b.h 使用它,您可以写#include "utils/a.h" 而不是#include "../../utils/a.h"。如果你在项目根目录中有stdafx.h,你可以将它包含在#include "stdafx.h"中。

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2018-01-21
    • 2011-06-18
    • 2023-03-11
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多