0

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

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

对于 Visual Studio 2010,我必须将 stdafx.h 放入每个 .cpp 文件中(如链接中所示)。因此a.cpp,在开始时,我有这个:

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

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

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

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

4

1 回答 1

0

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

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

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

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

于 2012-08-27T07:00:00.467 回答