これをどのように修正したか (.ncb/.suo/.user ファイルを削除して再構築しても解決しませんでした)...
VS 2008 プロジェクトでこのエラーが発生していたときに、次の特異性に気付きました。
- 他のダイアログではなく、1 つのダイアログ + クラスで発生しました。
- 壊れたダイアログの .cpp クラス ファイルでは、スコープ セレクターに「(Global Scope)」項目のみがあり、他の行はありませんでした (期待されるクラスが存在しませんでした)。
- .h クラス ファイルも確認しましたが、そこにあるスコープ セレクターは問題ありませんでした。
最初に #2 でこの問題を修正し (以下で説明)、VS を終了し、*.ncb、*.suo ファイルを削除し、VS を再起動し、プロジェクトを再構築すると、ウィザードが再び機能し始めました。
#2 のスコープ セレクターの問題を修正するために、まずクラスの .h ファイルに含まれていないヘッダーに絞り込みました。つまり、クラス宣言内でいくつかの型が使用されていましたが、これらの型を宣言した .h ファイルにはヘッダーがありませんでした。したがって、クラスの .h ファイルをクリーンな .cpp ファイルにインクルードすると、コンパイルされません。クラスの .h. クラスの .h の先頭に必要なすべてのヘッダーを追加した後 (クリーンな .cpp ファイルがコンパイルされるように)、.cpp ファイルのスコープ セレクターが正しく入力され、ウィザードが修正されました。
余談ですが、他の .h ファイルを .h ファイルのいずれにも含めないという考え方があり、Microsoft はかなり頻繁にこの方法に固執しているようです (幸いなことに、常にではありません)。私は通常、さまざまなインクルード ポリシーに従います。使用されるすべての宣言を含むヘッダーを常に .h ファイルにインクルードするため、モジュールを使用する必要がある場合は、その .h ファイルのみをインクルードする必要があります。これが起こらなかったまれな機会に、VSウィザードが詰まった(またはウィザードが依存しているIntelliSenseが詰まった)。これにより、このインクルージョン ポリシーへの私のコミットメントが強化されます。このポリシーの唯一の除外は、stdafx.h、windows、および MFC ファイルをモジュールの .h ファイルに配置しないことです。これは、ヘッダーがプリコンパイルされているため、別の方法で行われます。