我目前在我的 C++ 项目中同时使用 Visual Sstudio 2010 和 Eclipse+MinGW。我经历过不同的编译器行为,需要您的解释。这是一个例子:
假设我有a.h
和a.cpp
。而且我已经预编译了头文件(即stdafx.h
在 VS 和precomp.h
Eclipse 中(我为 Eclipse 创建了一个))。我将在预编译的头文件中包含一些基本的头文件(例如,opencv 中的 core.hpp)。在这两个a.h
和a.cpp
中,我将使用在包含在预编译头文件中的基本头文件中声明的一些类(例如,opencv 中的 Mat)。
对于 Visual Studio 2010,我必须将 stdafx.h 放入每个 .cpp 文件中(如链接中所示)。因此a.cpp
,在开始时,我有这个:
#include "stdafx.h"
#include "a.h"
此外,我不包括stdafx.h
在a.h
. 我期待编译器找不到在基本头文件中声明的类的错误,但事实证明在VS下编译很好。根本没有错误。
对于 Eclipse+MinGW,我喜欢这样:在a.h
,我放在#include "precomp.h"
开头。而在a.cpp中,我只放了#include "a.h"
(据一些朋友说,这是包含头文件的C++标准方式)。编译后,这是没有错误的,这是毫无疑问的。但是,如果我这样做与我为 Visual Studio 所做的类似,即我不包含precomp.h
在a.h
. 会有错误,说明有些类没有在这个范围内声明。As concerned by @MSalters, I should **highlight** that both a.h and a.cpp contain proper declarations and definitions.
所以任何人都可以帮我解释VS和Eclipse+MinGW的不同行为吗?非常感谢。