プリコンパイル済みヘッダ使用時に発生することがあるIntelliSenseエラーを解決する
なんとか解決したので共有します。
解決法だけ知りたい人は記事下部へどうぞ。(※私のケースですので万能法かどうかは未検証です。)
プリコンパイル済みヘッダとは
VSでビルドするとき、あるファイル内容に変更があった場合、コンパイラはそのファイルに関連するコードすべてをチェックしてコンパイルします。
小規模開発ではそれほど問題になりませんが、関連するファイルが増えてくるとビルドのたびにずらーっと列挙されるファイル名を見ながら「そんなとこ変更してないんじゃぼけえ!」と思いながらイライラする羽目になります。
(大阪人はせっかち)
多くのファイルと関連するけれども頻繁な変更の無い安定した(=Stable)コードを、あらかじめコンパイルしておくことでコンパイル時間を短縮するのが、「プリコンパイル済みヘッダ」です。
プリコンパイル済みヘッダの詳細と、利用方法は下記サイト等を見てください。
参考:ドキドキしないプリコンパイル済みヘッダー
プリコンパイル済みヘッダを使うとIntelliSenseがコード解析に失敗して大量にエラーを出す
※人によるようです
プリコンパイル済みヘッダ使うことでコンパイル時間が短縮されるのは良いのですが、IntelliSenseがヘッダを正常に読めず解析に失敗することがあります。
似た症例:#include "stdafx.h"がエラーになる
IntelliSenseによるコード解析やエラー発見機能は便利なので使いたい。でもプリコンパイル済みヘッダも使いたい。というわけで本題です。
解決法
私の場合は下記の手順で解決しました。
リビルドだけで解決した人もいるようです。
- プリコンパイル済みヘッダとそれを作成するcppファイル(例:stdafx.hとstdafx.cpp)をプロジェクト直下に移動する。
- vcxprojファイルと同階層に移動します
- 移動に伴って相対パスが変わるため必要に応じてstdafx.hを編集します
- sdfとipchを作り直す
- 一旦VisualStudioを閉じる
- sdfファイルとipchフォルダを削除
- VisualStudioを再起動する
- リビルド
- メニューバーのビルド(B)→リビルド(R)
詳しい検証をしていませんが、私の場合はstdafx.hとstdafx.cppをプロジェクト直下に移動したのが効いたようです。
良かった良かった。