#254 error C2857
2009年 05月 26日
メモ
(お急ぎの方は記事の一番下まで飛ばしちゃって下さい
LimpidStreamのコーディングをVisualStudio2005上で行っていたのですが、前々からコンパイル・ビルドに掛かる時間が気になっていたので(ビルド1回でカップラーメンできちゃう)、プリコンパイル済みヘッダーを使用する事にしました。
今まで何故使っていなかったんだっつう話なんですけど、初めの頃はまさかここまでソースコードのファイル数が増える(今150個位)とは思っていなかったのですよ。
で、プリコンパイル済みヘッダーの使い方をgoogle先生に聞きながら、プリコンパイル済みヘッダを設定する作業。いろんなヘッダを書いておいた<XXX/PCH.h>をProjectDirectoryに置き、XXX/Pch.cppに#include "Pch.h"と書き、プロジェクト設定で"プリコンパル~を使用する"を選択&PCHを使用のとこに XXX/PCH.h と入力。XXX/PCH.cppのプロパティで"プリコンパイル~を作成する"を選択して、[PCHを作成/使用]にはすでに XXX/PCH.h が入力されている状態。
ここで取りあえずPCH.cppをコンパイルしてみたのですが、エラー吐いて正常にコンパイルされませんでした。
え?ちゃんとインクルードしてるじゃん。しかもエラーをダブルクリックしたら\Microsoft Visual Studio 8\VC\include\xmemoryに飛ばされるってどういうことですか^^;
とまぁこんな感じですかね。
そんで、C2857についてggって見ましたが、結局、自分の環境でこのエラーの解決に繋がる情報は得られず。泣く泣くプロジェクトをいじいじしてました。
その後、PCH.cppを書き直して(1行だけデスケド)、もう一度コンパイルしてみると
ん?どしてコンパイル通ったの?さっき変なエラー吐いてたじゃん。
実はこの時、PCH.cppに記述されていた
#include "PCH.h" を
#include <XXX/PCH.h>
に変更したんですよ。 ※双方同じファイルを指しています
つまり
プロパティ→C/C++→プリコンパイル済みヘッダー→ファイルを使用してPCHを作成/使用に書いてある通りのパスをPCH.cppでインクルードしなければいけなかった。同じファイルを指すパスでも書き方が違っていればダメ。
という訳でした。
パスの書き方違ったって、同じファイルなんだからいいじゃんと思いましたけど、きっと駄目な理由が何か有るんでしょうね。
一応自分の環境ではこれでC2857エラーを解決できましたので、もし同じエラーでお悩みの方がいらっしゃれば、是非確認してみて下さい。
programmingされていない方にとっては意味不明な記事になっちゃいましたけど。まいっか
(お急ぎの方は記事の一番下まで飛ばしちゃって下さい
LimpidStreamのコーディングをVisualStudio2005上で行っていたのですが、前々からコンパイル・ビルドに掛かる時間が気になっていたので(ビルド1回でカップラーメンできちゃう)、プリコンパイル済みヘッダーを使用する事にしました。
今まで何故使っていなかったんだっつう話なんですけど、初めの頃はまさかここまでソースコードのファイル数が増える(今150個位)とは思っていなかったのですよ。
で、プリコンパイル済みヘッダーの使い方をgoogle先生に聞きながら、プリコンパイル済みヘッダを設定する作業。いろんなヘッダを書いておいた<XXX/PCH.h>をProjectDirectoryに置き、XXX/Pch.cppに#include "Pch.h"と書き、プロジェクト設定で"プリコンパル~を使用する"を選択&PCHを使用のとこに XXX/PCH.h と入力。XXX/PCH.cppのプロパティで"プリコンパイル~を作成する"を選択して、[PCHを作成/使用]にはすでに XXX/PCH.h が入力されている状態。
ここで取りあえずPCH.cppをコンパイルしてみたのですが、エラー吐いて正常にコンパイルされませんでした。
error C2857: /YcXXX\PCH.h コマンド ライン オプションで指定された '#include' ステートメントは、ソース ファイルに含まれていません。
え?ちゃんとインクルードしてるじゃん。しかもエラーをダブルクリックしたら\Microsoft Visual Studio 8\VC\include\xmemoryに飛ばされるってどういうことですか^^;
とまぁこんな感じですかね。
そんで、C2857についてggって見ましたが、結局、自分の環境でこのエラーの解決に繋がる情報は得られず。泣く泣くプロジェクトをいじいじしてました。
その後、PCH.cppを書き直して(1行だけデスケド)、もう一度コンパイルしてみると
ビルドログは "XXXXXXXXXXXX\Project\Release\BuildLog.htm" に保存されました。
- エラー 0、警告 0
ん?どしてコンパイル通ったの?さっき変なエラー吐いてたじゃん。
実はこの時、PCH.cppに記述されていた
#include "PCH.h" を
#include <XXX/PCH.h>
に変更したんですよ。 ※双方同じファイルを指しています
つまり
プロパティ→C/C++→プリコンパイル済みヘッダー→ファイルを使用してPCHを作成/使用に書いてある通りのパスをPCH.cppでインクルードしなければいけなかった。同じファイルを指すパスでも書き方が違っていればダメ。
パスの書き方違ったって、同じファイルなんだからいいじゃんと思いましたけど、きっと駄目な理由が何か有るんでしょうね。
一応自分の環境ではこれでC2857エラーを解決できましたので、もし同じエラーでお悩みの方がいらっしゃれば、是非確認してみて下さい。
programmingされていない方にとっては意味不明な記事になっちゃいましたけど。まいっか
by drive-Pixy
| 2009-05-26 22:16
| Programming