Bagikan melalui


Kesalahan Fatal C1083

Tidak dapat membuka file jenis file: 'file': pesan

Komentar

Pengkompilasi menghasilkan kesalahan C1083 saat tidak dapat menemukan file. Ada banyak kemungkinan penyebab kesalahan ini. Salah menyertakan jalur pencarian atau file header yang hilang atau salah nama adalah penyebab paling umum, tetapi jenis dan masalah file lainnya juga dapat menyebabkan C1083. Berikut adalah beberapa alasan umum mengapa pengkompilasi menghasilkan kesalahan ini.

Nama file yang ditentukan salah

Nama file mungkin salah ketik. Contohnya,

#include <algorithm.h>

mungkin tidak menemukan file yang Anda inginkan. Sebagian besar file header Pustaka Standar C++ tidak memiliki .h ekstensi nama file. Direktif ini #include tidak akan menemukan <algorithm> header. Untuk memperbaiki masalah ini, verifikasi bahwa nama file yang benar dimasukkan, sebagai berikut:

#include <algorithm>

Header Pustaka Runtime C tertentu terletak di subdirektori standar termasuk direktori. Misalnya, untuk menyertakan sys/types.h, Anda harus menyertakan sys nama subdirektori dalam direktif #include :

#include <sys/types.h>

File tidak disertakan dalam jalur pencarian sertakan

Pengkompilasi tidak dapat menemukan file dengan menggunakan aturan pencarian untuk atau #include arahan#import. Misalnya, ketika nama file header diapit oleh tanda kutip,

#include "myincludefile.h"

ini memberi tahu pengkompilasi untuk mencari file di direktori yang sama yang berisi file sumber terlebih dahulu, lalu melihat di lokasi lain yang ditentukan oleh lingkungan build. Jika tanda kutip berisi jalur absolut, pengkompilasi hanya mencari file di lokasi tersebut. Jika tanda kutip berisi jalur relatif, pengkompilasi mencari file di direktori relatif terhadap direktori sumber.

Jika nama diapit oleh tanda kurung sudut,

#include <stdio.h>

pengkompilasi mengikuti jalur pencarian yang ditentukan oleh lingkungan build, /I opsi pengkompilasi, /X opsi pengkompilasi, dan variabel lingkungan INCLUDE . Untuk informasi selengkapnya, termasuk detail spesifik tentang pesanan pencarian yang digunakan untuk menemukan file, lihat #include Directive (C/C++) dan #import Directive.

Jika file sertakan Anda berada di direktori lain relatif terhadap direktori sumber Anda, dan Anda menggunakan jalur relatif dalam direktif include Anda, Anda harus menggunakan tanda kutip ganda alih-alih tanda kurung sudut. Misalnya, jika file myheader.h header Anda berada di subdirektori sumber proyek Anda bernama header, contoh ini gagal menemukan file dan menyebabkan C1083:

#include <headers\myheader.h>

tetapi contoh ini berfungsi:

#include "headers\myheader.h"

Jalur relatif juga dapat digunakan dengan direktori pada jalur pencarian sertakan. Jika Anda menambahkan direktori ke variabel lingkungan INCLUDE atau ke jalur Sertakan Direktori di Visual Studio, jangan tambahkan bagian dari jalur ke direktif sertakan. Misalnya, jika header Anda terletak di \path\example\headers\myheader.h, dan Anda menambahkan \path\example\headers\ ke jalur Sertakan Direktori di Visual Studio, tetapi arahan Anda #include merujuk ke file sebagai

#include <headers\myheader.h>

maka file tidak ditemukan. Gunakan jalur yang benar relatif terhadap direktori yang ditentukan dalam jalur pencarian sertakan. Dalam contoh ini, Anda dapat mengubah jalur pencarian sertakan ke \path\example\, atau menghapus headers\ segmen jalur dari arahan #include .

Masalah pustaka pihak ketiga dan vcpkg

Jika Anda melihat kesalahan ini saat mencoba mengonfigurasi pustaka pihak ketiga sebagai bagian dari build Anda, pertimbangkan untuk menggunakan vcpkg, manajer paket C++, untuk menginstal dan membangun pustaka. vcpkg mendukung daftar pustaka pihak ketiga yang besar dan berkembang, dan menetapkan semua properti konfigurasi dan dependensi yang diperlukan untuk build yang berhasil sebagai bagian dari proyek Anda.

File ada di proyek Anda, tetapi bukan jalur pencarian include

Bahkan ketika file header tercantum dalam Penjelajah Solusi sebagai bagian dari proyek, file hanya ditemukan oleh pengkompilasi ketika dirujuk oleh #include atau #import direktif dalam file sumber, dan terletak di jalur pencarian sertakan. Berbagai jenis build mungkin menggunakan jalur pencarian yang berbeda. Opsi /X pengkompilasi dapat digunakan untuk mengecualikan direktori dari jalur pencarian sertakan. Ini memungkinkan build yang berbeda untuk menggunakan file yang berbeda termasuk file yang memiliki nama yang sama, tetapi disimpan di direktori yang berbeda. Ini adalah alternatif untuk kompilasi bersyariah dengan menggunakan perintah preprocessor. Untuk informasi selengkapnya tentang /X opsi pengkompilasi, lihat /X (Abaikan Jalur Sertakan Standar).

Untuk memperbaiki masalah ini, perbaiki jalur yang digunakan pengkompilasi untuk mencari file yang disertakan atau diimpor. Proyek baru menggunakan default termasuk jalur pencarian. Anda mungkin harus mengubah jalur pencarian include untuk menambahkan direktori untuk proyek Anda. Jika Anda mengkompilasi pada baris perintah, tambahkan jalur ke variabel lingkungan INCLUDE atau /I opsi pengkompilasi untuk menentukan jalur ke file.

Untuk mengatur jalur sertakan direktori di Visual Studio, buka kotak dialog Halaman Properti proyek. Pilih Direktori VC++ di bawah Properti Konfigurasi di panel kiri, lalu edit properti Sertakan Direktori . Untuk informasi selengkapnya tentang direktori per pengguna dan per proyek yang dicari oleh pengkompilasi di Visual Studio, lihat Halaman Properti Direktori VC++. Untuk informasi selengkapnya tentang /I opsi pengkompilasi, lihat /I (Direktori Sertakan Tambahan).

Baris perintah INCLUDE atau lingkungan LIB tidak diatur

Ketika pengkompilasi dipanggil pada baris perintah, variabel lingkungan sering digunakan untuk menentukan jalur pencarian. Jika jalur pencarian yang dijelaskan oleh variabel lingkungan INCLUDE atau LIB tidak diatur dengan benar, kesalahan C1083 dapat dihasilkan. Sebaiknya gunakan pintasan prompt perintah pengembang untuk mengatur lingkungan dasar untuk build baris perintah. Untuk informasi selengkapnya, lihat Membangun C/C++ di Baris Perintah. Untuk informasi selengkapnya tentang cara menggunakan variabel lingkungan, lihat Cara: Menggunakan Variabel Lingkungan dalam Build.

File mungkin dikunci atau digunakan

Jika Anda menggunakan program lain untuk mengedit atau mengakses file, mungkin file tersebut terkunci. Coba tutup berkas di program lain. Terkadang program lain dapat berupa Visual Studio itu sendiri, jika Anda menggunakan opsi kompilasi paralel. Jika menonaktifkan opsi build paralel membuat kesalahan hilang, maka ini adalah masalahnya. Sistem build paralel lainnya juga dapat mengalami masalah ini. Berhati-hatilah untuk mengatur dependensi file dan proyek sehingga urutan build sudah benar. Dalam beberapa kasus, pertimbangkan untuk membuat proyek perantara untuk memaksa urutan dependensi build untuk file umum yang mungkin dibangun oleh beberapa proyek. Terkadang program antivirus mengunci sementara file yang baru-baru ini diubah untuk pemindaian. Jika memungkinkan, pertimbangkan untuk mengecualikan direktori build proyek Anda dari pemindai antivirus.

Versi nama file yang salah disertakan

Kesalahan C1083 juga dapat menunjukkan bahwa versi file yang salah disertakan. Misalnya, build dapat menyertakan versi file yang salah yang memiliki #include direktif untuk file header yang tidak ditujukan untuk build tersebut. Misalnya, file tertentu mungkin hanya berlaku untuk build x86, atau untuk build Debug. Ketika file header tidak ditemukan, pengkompilasi menghasilkan kesalahan C1083. Perbaikan untuk masalah ini adalah menggunakan file yang benar, bukan untuk menambahkan file header atau direktori ke build.

Header yang telah dikombinasikan sebelumnya belum dikompreilasi

Ketika proyek dikonfigurasi untuk menggunakan header yang telah dikompilasi sebelumnya, file yang relevan .pch harus dibuat sehingga file yang menggunakan konten header dapat dikompilasi. Misalnya, pch.cpp file (stdafx.cpp di Visual Studio 2017 dan yang lebih lama) secara otomatis dibuat di direktori proyek untuk proyek baru. Kompilasi file tersebut terlebih dahulu untuk membuat file header yang telah dikompilasi sebelumnya. Dalam desain proses build umum, ini dilakukan secara otomatis. Untuk informasi selengkapnya, lihat Membuat File Header yang Telah Dikommpilasikan sebelumnya.

Penyebab lainnya

  • Anda telah menginstal SDK atau pustaka pihak ketiga, tetapi belum membuka perintah pengembang baru. Jika SDK atau pustaka menambahkan file ke jalur INCLUDE , Anda mungkin perlu membuka jendela prompt perintah pengembang baru untuk mengambil perubahan variabel lingkungan ini.

  • File menggunakan kode terkelola, tetapi opsi /clr pengkompilasi tidak ditentukan. Untuk informasi selengkapnya, lihat /clr (Kompilasi Runtime Bahasa Umum).

  • File dikompilasi dengan menggunakan pengaturan opsi pengkompilasi yang berbeda /analyze dari yang digunakan untuk melakukan prakompilasi header. Ketika header untuk proyek telah dikomproduksi sebelumnya, semua harus menggunakan pengaturan yang sama /analyze . Untuk informasi selengkapnya, lihat /analyze (Analisis Kode).

  • File atau direktori dibuat oleh Subsistem Windows untuk Linux, sensitivitas kasus per direktori diaktifkan, dan kasus jalur atau file yang ditentukan tidak cocok dengan kasus jalur atau file pada disk.

  • File, direktori, atau disk bersifat baca-saja.

  • Visual Studio atau alat baris perintah tidak memiliki izin yang memadai untuk membaca file atau direktori. Ini dapat terjadi, misalnya, ketika file proyek memiliki kepemilikan yang berbeda dari proses yang menjalankan Visual Studio atau alat baris perintah. Terkadang masalah ini dapat diperbaiki dengan menjalankan Visual Studio atau perintah pengembang sebagai Administrator.

  • Handel file tidak cukup. Tutup beberapa aplikasi lalu kompilasi ulang. Kondisi ini tidak biasa dalam keadaan umum. Namun, itu dapat terjadi ketika proyek besar dibangun di komputer yang memiliki memori fisik terbatas.

Contoh

Contoh berikut menghasilkan kesalahan C1083 saat file "test.h" header tidak ada di direktori sumber atau di jalur pencarian sertakan.

// C1083.cpp
// compile with: /c
#include "test.h"   // C1083 test.h doesn't exist
#include "stdio.h"  // OK

Untuk informasi tentang cara membangun proyek C/C++ di IDE atau di baris perintah, dan informasi tentang pengaturan variabel lingkungan, lihat Proyek dan sistem build.

Lihat juga