0

現在、C++プロジェクトにVisualSstudio2010とEclipse+MinGWの両方を使用しています。私はさまざまなコンパイラの動作を経験しましたが、あなたの親切な説明が必要です。次に一例を示します。

私が持っているa.hとしましょうa.cpp。そして、プリコンパイル済みヘッダーファイルがあります(つまり、stdafx.hVSとprecomp.hEclipse(Eclipse用に作成しました))。プリコンパイル済みヘッダーファイルにいくつかの基本的なヘッダーファイルをインクルードします(たとえば、opencvのcore.hpp)。そして、との両方a.ha.cpp、プリコンパイル済みヘッダーに含まれている基本的なヘッダーファイルで宣言されたいくつかのクラス(たとえば、opencvのMat)を使用します。

Visual Studio 2010の場合、すべての.cppファイルにstdafx.hを配置する必要があります(リンクのように)。だからa.cpp、私は最初にこれを持っています:

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

その上、私はに含まれていません。コンパイラが基本ヘッダーファイルで宣言されたクラスを見つけることができないというエラーを予期していましたが、VSではコンパイルは問題ないことがわかりました。エラーはまったくありません。stdafx.ha.h

Eclipse + MinGWの場合、私は次のようにします。で、最初a.hに置き#include "precomp.h"ます。そして、a.cppには、私が入れただけです#include "a.h"一部の友人が言ったように、これはヘッダーファイルをインクルードするC ++の標準的な方法です)。コンパイル後、これは間違いではありません。ただし、Visual Studioで行ったのと同じように行う場合、つまり、に含めない場合。一部のクラスがこのスコープで宣言されていないことを示すエラーが発生します。precomp.ha.hAs 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」の内容の前に置く必要があります。これを実現するには、基本的に2つの方法があります。1つは、両方のヘッダーをこの順序で含めること(Visual Studioスタイル)であり、もう1つは、「ah」の宣言の前に「precomp.h」を含めることです。(MinGWスタイル)

事前コンパイルのルールは、事前コンパイルが少ないため、MinGWでは多少緩和されています。それか

于 2012-08-27T07:00:00.467 に答える