【问题标题】:C : Pre-compiled header file in Visual Studio and Eclipse+MinGWC : Visual Studio 和 Eclipse+MinGW 中的预编译头文件
【发布时间】:2012-08-27 06:12:44
【问题描述】:

我目前在我的 C++ 项目中同时使用 Visual Sstudio 2010 和 Eclipse+MinGW。我经历过不同的编译器行为,需要您的解释。下面是一个例子:

假设我有a.ha.cpp。而且我已经预编译了头文件(即,VS 中的 stdafx.h 和 Eclipse 中的 precomp.h(我为 Eclipse 创建了一个))。我将在预编译的头文件中包含一些基本的头文件(例如,opencv 中的 core.hpp)。在a.ha.cpp 中,我将使用一些在预编译头文件中包含的基本头文件中声明的类(例如,opencv 中的Mat)。

对于 Visual Studio 2010,我必须将 stdafx.h 放入每个 .cpp 文件中(如在 link 中)。所以在a.cpp,我一开始就有这个:

#include "stdafx.h"
#include "a.h"

此外,我a.h 中包含stdafx.h。我期待编译器找不到基本头文件中声明的类的错误,但事实证明在VS下编译很好。完全没有错误。

对于 Eclipse+MinGW,我这样做:在a.h 中,我将#include "precomp.h" 放在开头。而在 a.cpp 中,我放了#include "a.h"正如一些朋友所说,这是包含头文件的 C++ 标准方式)。编译后,这是没有错误的,这是毫无疑问的。但是,如果我像在 Visual Studio 中那样做,即我a.h 中包含precomp.h。会有错误,说明有些类没有在这个范围内声明。 As concerned by @MSalters, I should **highlight** that both a.h and a.cpp contain proper declarations and definitions.

所以任何人都可以帮助向我解释 VS 和 Eclipse+MinGW 的不同行为吗?非常感谢。

【问题讨论】:

    标签: c++ visual-studio-2010 mingw


    【解决方案1】:

    预编译的头文件是一种效率措施。如果编译器使用普通方法编译它们,则代码应该仍然有效。特别是,您的 Visual C++ 代码应该在 Eclipse 上编译,反之亦然。

    我强烈怀疑您的问题出在 Eclipse 方面。为什么a.cpp 几乎是空的?它应该包含a.h 中所有声明的定义。

    如果您包含“precomp.h”,它可能应该位于“a.h”的内容之前。基本上有两种方法可以实现这一目标。一种是以该顺序包含两个标题(Visual Studio 样式),另一种是在“a.h”中的任何声明之前包含“precomp.h”。 (MinGW 风格)

    在 MinGW 中预编译的规则稍微宽松一些,因为它预编译的更少。那个

    【讨论】:

    • 对不起,我不是说a.cpp 中只包含头文件。定义在a.cpp 中。所以问题不在于这个。还有其他解释吗?谢谢!
    • @Giantron:当然可以,但是您最好尝试一个非常简单的设置,以便在仍然失败时显示所有代码。
    • 我发现了问题.. 对不起,我没有太注意正确放置using namespace ...; 问题是由于放错了那个。你能建议把using namespace ...;放在哪里最好吗?我应该总是把它放在头文件或源文件中吗?非常感谢。
    • @Giantron:这很简单。总是在源文件中。
    • 我明白了。非常感谢,@MSalters
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2012-07-28
    • 2011-06-13
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-02-25
    相关资源
    最近更新 更多