0

それで、

更新しようとしているこのコードがあります。Visual Studio 6用に作成されており、VisualStudio2010でコンパイルできるようにしようとしています。

stdafx.hには、afx.hとafxwin.h、およびプログラムが機能するために必要なその他のいくつかのものが含まれています。特に、他のヘッダーファイルではCStringが使用されています。

stdafx.hのインクルードの上部に、#pragmaメッセージを追加して、最初にコンパイルされていることを確認しました。ヘッダーファイルの先頭にもエラーをスローするものがあります。コンパイラの出力から、stdafx.hが最初にコンパイルされていたことがわかります。これは良いことです。

しかし、エラーがありました。(CStringは型として認識されていませんでした。)そこで、すべてのインクルードを確実に通過することにしました。そのため、#includeの後に別の#pragmaメッセージを配置しましたが、そのメッセージは出力されません。

それは実際に含まれていないという意味ですか?

4

3 に答える 3

1

説明を理解するのは少し難しいですが、通常のコンパイルヘッダーとプリコンパイル済みヘッダーの違いに遭遇していると思います。

プリコンパイル済みヘッダーを使用すると、コンパイラは最初のファイルを通常どおりに処理します(新しいプロジェクトウィザードはこのためにstdafx.cppを設定します)。コンパイル前制御のプロジェクトオプションで設定されたインクルードファイル(通常はstdafx.h)を処理した後、コンパイラはその状態を.pchファイルに保存します。

他のすべてのファイルについては、コンパイラーは処理せずにファイルをスキミングし、インクルードファイルを探すだけです。次に、.pchファイルを読み取り、保存された状態をロードして、通常どおり解析とコンパイルを続行します。

この設計の結果の1つは#include "stdafx.h"、stdafx.cppの上の行が状態の一部になり、他のすべてのファイルに表示されることです。また、他のファイルの上記の行#include "stdafx.h"は単に無視されます。

于 2010-06-23T17:33:34.633 に答える
0

問題は、CStringでtypedefを使用することに関係していました。VS 6以降、それは不可能です。参照を手動で変更したところ、コンパイルされました。

于 2010-06-23T17:34:02.323 に答える
0

私のコメントを答えに渡す。

VS 6回のCStringはクラスであり、その後テンプレートに変更されました。多分それはそれに起因する何かがありますか?

問題は、CStringでtypedefを使用することに関係していました。VS 6以降、それは不可能です。参照を手動で変更したところ、コンパイルされました。

于 2010-06-23T17:42:28.760 に答える