致命的なエラー C1083
filetype ファイルを開けません: 'file': message
コンパイラは、ファイルが見つからない場合に C1083 エラーを生成します。 このエラーには多くの原因が考えられます。 検索パスが正しくないか、ヘッダー ファイルが見つからないか名前に誤りがある場合が最も一般的ですが、他のファイルの種類や問題によっても C1083 が発生する可能性があります。 このエラーが生成される一般的な理由のいくつかを次に示します。
指定されたファイル名が正しくない
ファイルの名前が間違って入力されている可能性があります。 たとえば、 にします。
#include <algorithm.h>
この場合、目的のファイルが見つからないことがあります。 ほとんどの C++ 標準ライブラリ ヘッダー ファイルには、ファイル名拡張子 .h
がありません。 この #include
ディレクティブはヘッダーを <algorithm>
見つけることができません。 この問題を解決するには、次のように正しいファイル名が入力されていることを確認します。
#include <algorithm>
一部の C ランタイム ライブラリのヘッダーは、標準のインクルード ディレクトリのサブディレクトリにあります。 たとえば、sys/types.h
を含めるには、sys
サブディレクトリの名前を #include
ディレクティブに含める必要があります。
#include <sys/types.h>
インクルード検索パスにファイルが含まれていない
コンパイラは、or #import
ディレクティブの検索規則を使用してファイルを#include
見つけることができません。 たとえば、ヘッダー ファイル名が次のように引用符で囲まれている場合、
#include "myincludefile.h"
これは、ソース ファイルが含まれている同じディレクトリにあるファイルを最初に検索し、次に、ビルド環境によって指定された他の場所を検索するようコンパイラに指示しています。 絶対パスが二重引用符で囲まれている場合、コンパイラはその場所だけでファイルを検索します。 二重引用符で囲まれているのが相対パスの場合は、ソース ディレクトリに対して相対的なディレクトリでファイルを検索します。
名前が山かっこで囲まれている場合、
#include <stdio.h>
コンパイラは、ビルド環境、/I
コンパイラ オプション、/X
コンパイラ オプション、および INCLUDE 環境変数で定義された検索パスに従います。 ファイルの検索順序などの詳細については、「#include ディレクティブ (C/C++)」および #import ディレクティブに関するページを参照してください。
インクルード ファイルがソース ディレクトリに対して相対的な別のディレクトリに存在し、インクルード ディレクティブで相対パスを使用する場合は、角かっこの代わりに二重引用符を使用する必要があります。 たとえば、ヘッダー ファイル myheader.h
が headers という名前のプロジェクト ソースのサブディレクトリにある場合、この例ではファイルの検索に失敗し、C1083 が発生します。
#include <headers\myheader.h>
ただし、この例は機能します。
#include "headers\myheader.h"
相対パスは、インクルード検索パスのディレクトリと一緒に使用することもできます。 ディレクトリを INCLUDE 環境変数または Visual Studio のインクルード ディレクトリ パスに追加する場合は、パスの一部をインクルード ディレクティブに追加しないでください。 たとえば、ヘッダーが \path\example\headers\myheader.h
にあり、Visual Studio のインクルード ディレクトリ パスに \path\example\headers\
を追加したものの、#include
ディレクティブがファイルを次のように参照する場合
#include <headers\myheader.h>
ファイルが見つかりません。 インクルード検索パスで指定されたディレクトリを基準にした適切なパスを使用します。 この例では、インクルード検索パスを \path\example\
に変更するか、#include
ディレクティブから headers\
パス セグメントを削除できます。
サードパーティ ライブラリの問題と vcpkg
サードパーティ製のライブラリをビルドの一部として設定しようとした際にこのエラーが表示された場合は、C++ パッケージ マネージャである vcpkg を使用してライブラリをインストールし、ビルドすることを検討してください。 vcpkg では、大規模な拡大中のサード パーティのライブラリのリストがサポートされ、プロジェクトの一部として適切なビルドに必要なすべての構成プロパティと依存関係が設定されます。
ファイルはプロジェクトに含まれますが、インクルード検索パスはそうでありません。
ヘッダー ファイルがプロジェクトの一部としてソリューション エクスプローラーにリストされている場合でも、ファイルは、ソース ファイル内の or #import
ディレクティブによって参照され、インクルード検索パスにある場合にのみコンパイラによって#include
見つかります。 ビルドの種類が異なると、使用する検索パスも異なることがあります。 /X
コンパイラ オプションを使用すると、ディレクトリを、インクルード検索パスから除外できます。 このため、別々のビルドにおいて、名前は同じでも別々のディレクトリに置かれている別々のインクルード ファイルを使用することができます。 これは、プリプロセッサ コマンドを使用する条件付きコンパイルに代わる方法です。 /X
コンパイラ オプションの詳細については、「/X
(標準インクルード パスの無視)」を参照してください。
この問題を解決するには、インクルード ファイルまたはインポートされたファイルを検索するときにコンパイラが使用するパスを修正します。 新しいプロジェクトでは、既定のインクルード検索パスが使用されます。 プロジェクトのディレクトリを追加するには、インクルード検索パスを変更する必要がある場合があります。 コマンド ラインでコンパイルする場合は、INCLUDE 環境変数または/I
コンパイラ オプションへのパスを追加して、ファイルへのパスを指定します。
Visual Studio でインクルード ディレクトリ パスを設定するには、プロジェクトの [プロパティ ページ] ダイアログ ボックスを 開きます。 左ペインの [構成プロパティ] の [VC++ ディレクトリ] を選択し、次に [インクルード ディレクトリ] プロパティを編集します。 Visual Studio でコンパイラが検索するユーザー単位およびプロジェクト単位のディレクトリの詳細については、VC++ ディレクトリ プロパティ ページに関するページを参照してください。 /I
コンパイラ オプションの詳細については、「/I
(追加インクルード ディレクトリ)」を参照してください。
コマンド ライン INCLUDE または LIB 環境が設定されていません
コマンド ラインでコンパイラを実行するときに、環境変数を使用して、検索パスを指定することはよくあります。 INCLUDE 環境変数または LIB 環境変数によって記述された検索パスが正しく設定されていない場合は、C1083 エラーが生成される可能性があります。 開発者コマンド プロンプトのショートカットを使用して、コマンド ライン ビルドの基本環境を設定することを強くお勧めします。 詳細については、コマンドラインでの C/C++ コードのビルドに関するページを参照してください。 環境変数の使用方法の詳細については、「方法: ビルドで環境変数を使用する」を参照してください。
ファイルがロックされているか、使用中である可能性があります
別のプログラムを使用してファイルを編集またはアクセスしている場合は、ファイルがロックされている可能性があります。 他のプログラムでファイルを閉じてみます。 並列コンパイル オプションを使用している場合は、他のプログラムが Visual Studio 自体になる場合があります。 並列ビルド オプションをオフにするとエラーが解決する場合は、これが問題になります。 他の並列ビルド システムにもこの問題が発生する可能性があります。 ビルド順序が正しくなるように、ファイルとプロジェクトの依存関係を設定してください。 場合によっては、複数のプロジェクトによってビルドされる可能性がある共通ファイルのビルド依存関係の順序を強制する中間プロジェクトを作成することを検討してください。 ウイルス対策プログラムで、最近変更されたファイルをスキャン用に一時的にロックする場合があります。 可能であれば、ウイルス対策スキャナーから、ご自身のプロジェクト ビルド ディレクトリを除外することを検討します。
ファイル名のバージョンが間違っている
C1083 エラーは、誤ったバージョンのファイルがインクルードされたことを示している場合もあります。 たとえば、ビルドに、そのビルド用ではないヘッダー ファイルのディレクティブを #include
含むファイルのバージョンが間違っている可能性があります。 たとえば、特定のファイルは x86 ビルドまたはデバッグ ビルドにのみ適用される場合があります。 ヘッダー ファイルが見つからない場合、コンパイラによって C1083 エラーが生成されます。 この問題の解決方法は、正しいファイルを使用することで、ヘッダー ファイルやディレクトリをビルドに追加することではありません。
プリコンパイル済みヘッダーはまだプリコンパイルされていません
プロジェクトがプリコンパイル済みヘッダーを使用するように設定されている場合、関連する .pch
ファイルが作成されて、そのヘッダーの内容を使用するファイルをコンパイルできるようにする必要があります。 たとえば、新しいプロジェクトのプロジェクト ディレクトリには、pch.cpp
ファイル (Visual Studio 2017 以前では stdafx.cpp
) が自動的に作成されます。 そのファイルを最初にコンパイルして、プリコンパイル済みヘッダー ファイルを作成してください。 通常のビルド プロセス設計では、これは自動的に処理されます。 詳細については、プリコンパイル済みヘッダー ファイルの作成に関するページを参照してください。
その他の原因
SDK またはサード パーティ製ライブラリをインストールしたが、新しい開発者コマンド プロンプトを開いていない。 SDK またはライブラリが INCLUDE パスにファイルを追加する場合は、新しい開発者コマンド プロンプト ウィンドウを開いて、これらの環境変数の変更を取得することが必要になる場合があります。
ファイルはマネージド コードを使用しますが、コンパイラ オプション
/clr
は指定されていません。 詳細については、「/clr
(共通言語ランタイムのコンパイル)」を参照してください。ヘッダーをプリコンパイルしたときに使用したものとは別の
/analyze
コンパイラ オプション設定を使用して、ファイルがコンパイルされています。 プロジェクトのヘッダーがプリコンパイルされる場合、すべてのファイルが同じ/analyze
設定を使用する必要があります。 詳細については、「/analyze
(コード分析)」を参照してください。ファイルまたはディレクトリは、Linux 用 Windows サブシステムによって作成され、ディレクトリごとの大文字と小文字の区別が有効になり、指定されたパスまたはファイルの大文字と小文字がディスク上のパスまたはファイルの大文字と小文字が一致しません。
ファイル、ディレクトリ、またはディスクが読み取り専用です。
Visual Studio またはコマンド ライン ツールには、ファイルまたはディレクトリを読み取る十分なアクセス許可がありません。 これは、たとえば、プロジェクト ファイルの所有権が、Visual Studio またはコマンド ライン ツールで実行されているプロセスと異なる場合に発生する可能性があります。 この問題は、管理者として Visual Studio または開発者コマンド プロンプトを実行することで修正できる場合があります。
ファイル ハンドルが不足しています。 いくつかのアプリケーションを閉じてから、再コンパイルしてください。 この状況は、通常であればめったに発生しません。 ただし、物理メモリが限定されているコンピューターで大規模なプロジェクトをビルドすると発生することがあります。
例
次の例では、ソース ディレクトリまたはインクルード検索パスにヘッダー ファイル "test.h"
が存在しない場合に C1083 エラーが生成されます。
// C1083.cpp
// compile with: /c
#include "test.h" // C1083 test.h doesn't exist
#include "stdio.h" // OK
IDE またはコマンド ラインで C/C++ プロジェクトをビルドする方法、および環境変数の設定に関する情報については、プロジェクトとビルド システムに関するページを参照してください。