次の方法で共有


コンパイラ エラー C2857

/Ycfilename コマンド ライン オプションで指定された '#include' ステートメントは、ソース ファイルに含まれていません

/Yc オプションは、コンパイルするソース ファイルに含まれていないインクルード ファイルの名前を指定します。

解説

ソース ファイルで /Ycfilename オプションを使用してプリコンパイル済みヘッダー (PCH) ファイルを作成する場合、そのソース ファイルには filename ヘッダー ファイルが含まれている必要があります。 ソース ファイルに含まれるすべてのファイル (指定された filename までを含む) は、PCH ファイルに含まれます。 PCH ファイルを使用するために /Yufilename オプションを使用してコンパイルされた他のソース ファイルでは、filename のインクルードがコメント以外の最初の行である必要があります。 コンパイラは、このインクルードの前に、ソース ファイル内のすべてのものを無視します。

このエラーは、PCH ソース ファイルでコンパイルされていない、条件付きのコンパイル ブロックの #include "filename" ステートメントが原因で発生する可能性があります。

一般的な使用法では、プロジェクト内の 1 つのソース ファイルが PCH ソース ファイルとして指定され、1 つのヘッダー ファイルが PCH ヘッダー ファイルとして使用されます。 一般的な PCH ヘッダー ファイルには、プロジェクトで使用されているすべてのライブラリ ヘッダーがありますが、まだ開発中のローカル ヘッダーは含まれていません。 このサンプルでは、PCH ヘッダー ファイルに my_pch.h という名前が付けられています。

// my_pch.h
#pragma once
#include <stdio.h>

PCH ソース ファイルは、/Ycmy_pch.h オプションを使用してコンパイルされます。 コンパイラがこの PCH ヘッダー ファイルのインクルードを見つけられない場合、C2857 を生成します。

// my_pch.cpp
// Compile by using: cl /EHsc /W4 /Yumy_pch.h /c my_pch.cpp

#if 0
#include "my_pch.h"  // C2857; remove conditional directives to fix
#endif

この PCH ファイルを使用するには、/Yumy_pch.h オプションを使用してソース ファイルをコンパイルする必要があります。 PCH ヘッダー ファイルは、PCH を使用するソース ファイルに最初に含める必要があります。

// C2857.cpp
// Compile my_pch.cpp first, then
// compile by using: cl /EHsc /W4 /Yumy_pch.h my_project.cpp my_pch.obj
// Include the pch header before any other non-comment line
#include "my_pch.h"

int main()
{
    puts("Using a precompiled header file.\n");
}