Неустранимая ошибка C1083

Не удается открыть filetype file: 'file': message

Компилятор создает ошибку C1083, если не удается найти нужный файл. Эта ошибка имеет несколько возможных причин. Неправильный путь поиска, отсутствие или неправильное имя файлов заголовков являются наиболее распространенными причинами, но другие типы файлов и проблемы также могут вызвать C1083. Ниже приведены некоторые распространенные причины, по которым компилятор создает эту ошибку.

Указано неверное имя файла

При вводе имени файла допущена ошибка. Например,

#include <algorithm.h>

может не найти файл, который вы хотели. Большинство файлов заголовков стандартной библиотеки C++ не имеют расширения .h. Заголовок <алгоритма> не будет найден этой #include директивой. Чтобы устранить эту проблему, убедитесь, что введено правильное имя файла, как показано в следующем примере:

#include <algorithm>

Некоторые заголовки библиотеки времени выполнения C расположены в подкаталоге стандартного каталога включения. Например, чтобы включить sys/types.h, необходимо включить имя подкаталога sys в директиву #include :

#include <sys/types.h>

Файл не включен в путь поиска включения

Компилятору не удается найти файл, используя правила поиска, которые указаны в директиве #include или #import. Например, если имя файла заголовка заключено в кавычки,

#include "myincludefile.h"

Это указывает компилятору сначала искать файл в том же каталоге, который содержит исходный файл, а затем искать в других расположениях, указанных в среде сборки. Если кавычки содержат абсолютный путь, компилятор выполняет поиск файла только в этом расположении. Если кавычки содержат относительный путь, компилятор выполняет поиск файла в каталоге относительно исходного каталога.

Если имя заключено в угловые скобки,

#include <stdio.h>

компилятор следует пути поиска, который определяется средой сборки, параметром /I компилятора, параметром компилятора /X и переменной среды INCLUDE . Дополнительные сведения, включая конкретные сведения о порядке поиска, используемом для поиска файла, см. в разделах Директива #include (C/C++) и Директива #import.

Если включаемые файлы находятся в другом каталоге относительно исходного каталога и в директивах include используется относительный путь, вместо угловых скобок следует использовать двойные кавычки. Например, если файл myheader.h заголовка находится в подкаталоге источников проекта с именами headers, то в этом примере не удается найти файл и возникает ошибка C1083:

#include <headers\myheader.h>

но этот пример работает:

#include "headers\myheader.h"

Относительные пути также можно использовать с каталогами в пути поиска include. Если вы добавляете каталог в переменную среды INCLUDE или в путь Include Directoryies в Visual Studio, не добавляйте часть пути к директивам include. Например, если заголовок находится по адресу \path\example\headers\myheader.h, и вы добавляете \path\example\headers\ в путь Include Directoryies в Visual Studio, но ваша #include директива ссылается на файл как

#include <headers\myheader.h>

тогда файл не найден. Используйте правильный путь относительно каталога, указанного в пути поиска включения. В этом примере можно изменить путь поиска include на \path\example\или удалить headers\ сегмент пути из директивы #include .

Проблемы со сторонними библиотеками и vcpkg

Если эта ошибка возникает при попытке настроить стороннюю библиотеку как часть сборки, рассмотрите возможность установки и сборки библиотеки с помощью vcpkg, диспетчера пакетов C++. vcpkg поддерживает большой и растущий список сторонних библиотек и задает все свойства конфигурации и зависимости, необходимые для успешных сборок в рамках проекта.

Файл находится в проекте, но не включает путь поиска

Даже если файлы заголовков перечислены в Обозреватель решений как часть проекта, они находятся компилятором только в том случае, если на них ссылается директива #include или #import в исходном файле, и находятся в пути поиска include. Для различных типов построений могут использоваться разные пути поиска. Параметр /X компилятора можно использовать для исключения каталогов из пути поиска включения. Это позволяет использовать для разных построений разные файлы include, которые имеют одно имя, но расположены в разных каталогах. Таким образом создается альтернатива условной компиляции с помощью команд препроцессора. Дополнительные сведения о параметре компилятора см. в /X разделе /X (Игнорировать стандартные пути включения).

Чтобы устранить эту проблему, исправьте путь, используемый компилятором для поиска включаемого или импортируемого файла. В новом проекте используются пути поиска включения по умолчанию. Возможно, потребуется изменить путь поиска включения, чтобы добавить каталог для проекта. При компиляции в командной строке добавьте путь к переменной среды INCLUDE или параметр компилятора /I , чтобы указать путь к файлу.

Чтобы задать путь к каталогу включения в Visual Studio, откройте диалоговое окно Страницы свойств проекта. Выберите Каталоги VC++ в разделе Свойства конфигурации на левой панели, а затем измените свойство Include Directoryies . Дополнительные сведения о каталогах для отдельных пользователей и проектов, в которые компилятор ищет в Visual Studio, см. на странице свойств каталогов VC++. Дополнительные сведения о параметре компилятора см. в /I разделе /I Дополнительные каталоги включения.

Среда INCLUDE или LIB в командной строке не задана

Если компилятор вызывается из командной строки, для указания путей поиска часто используются переменные среды. Если путь поиска, описанный переменной среды INCLUDE или LIB , задан неправильно, может возникнуть ошибка C1083. Мы настоятельно рекомендуем использовать ярлык командной строки разработчика, чтобы задать базовую среду для сборок из командной строки. Дополнительные сведения см. в разделе Сборка C/C++ в командной строке. Дополнительные сведения об использовании переменных среды см. в разделе Практическое руководство. Использование переменных среды в сборке.

Файл может быть заблокирован или используется

Если вы используете другую программу для редактирования или доступа к файлу, возможно, файл заблокирован. Попробуйте закрыть файл в другой программе. Иногда другой программой может быть сама Visual Studio, если вы используете параметры параллельной компиляции. Если при отключении параметра параллельной сборки ошибка исчезла, проблема заключается в этом. Эта проблема также может возникать в других системах параллельной сборки. Будьте внимательны, чтобы задать зависимости файлов и проектов, чтобы порядок сборки был правильным. В некоторых случаях рекомендуется создать промежуточный проект для принудительного построения порядка зависимостей для общего файла, который может быть создан несколькими проектами. Иногда антивирусные программы временно блокируют недавно измененные файлы для сканирования. По возможности рекомендуется исключить каталоги сборки проекта из антивирусного сканера.

Включена неправильная версия имени файла

Ошибка C1083 также может указывать на включение неверной версии файла. Например, построение может включать неверную версию файла, содержащего директиву #include для файла заголовка, который не предназначен для данного построения. Например, некоторые файлы могут применяться только к сборкам x86 или к отладочным сборкам. Если файл заголовка не найден, компилятор выдает ошибку C1083. Для исправления этой проблемы необходимо использовать правильный файл, а не добавлять в построение файл заголовка или каталог.

Предкомпилированные заголовки еще не скомпилированы

Если в проекте настроено использование предварительно скомпилированных заголовков, необходимо создать соответствующие .pch файлы, чтобы можно было компилировать файлы, использующие содержимое заголовка. Например, pch.cpp файл (stdafx.cpp в Visual Studio 2017 и более ранних версиях) автоматически создается в каталоге проекта для новых проектов. Сначала необходимо скомпилировать этот файл, чтобы создать предкомпилированные файлы заголовков. В типичной конструкции процесса сборки это выполняется автоматически. Дополнительные сведения см. в разделе Создание предварительно скомпилированных файлов заголовков.

Дополнительные причины

  • Вы установили пакет SDK или стороннюю библиотеку, но не открыли новое окно командной строки разработчика после установки пакета SDK или библиотеки. Если пакет SDK или библиотека добавляет файлы в путь INCLUDE , может потребоваться открыть новое окно командной строки разработчика, чтобы получить эти изменения переменных среды.

  • Файл использует управляемый код, но параметр /clr компилятора не указан. Дополнительные сведения см. в разделе /clr (Компиляция СРЕДЫ CLR).

  • Файл компилируется с использованием параметра компилятора, отличного /analyze от параметра, используемого для предварительной компиляции заголовков. При предварительной компиляции заголовков проекта все они должны использовать одни и те же /analyze параметры. Дополнительные сведения см. в разделе /analyze (Анализ кода).

  • Файл или каталог был создан подсистема Windows для Linux, включена чувствительность к регистру для каждого каталога, а указанный вариант пути или файла не соответствует регистру пути или файла на диске.

  • Файл, каталог или диск доступен только для чтения.

  • Visual Studio или программы командной строки не имеют достаточных разрешений для чтения файла или каталога. Это может произойти, например, если права владения файлами проекта отличаются от прав владения процессом, на котором выполняется Visual Studio, или средствами командной строки. Иногда эту проблему можно устранить, запустив Visual Studio или командную строку разработчика от имени администратора.

  • Недостаточно дескрипторов файлов. Закройте часть приложений и повторите компиляцию. Эта ситуация маловероятна в обычных условиях. Однако она может возникать при построении крупных проектов на компьютере с ограниченной физической памятью.

Пример

В следующем примере возникает ошибка C1083, если файл "test.h" заголовка не существует в исходном каталоге или в пути поиска include.

// C1083.cpp
// compile with: /c
#include "test.h"   // C1083 test.h does not exist
#include "stdio.h"  // OK

Сведения о сборке проектов C/C++ в интегрированной среде разработки или в командной строке, а также о настройке переменных среды см. в статье Проекты и системы сборки.

См. также раздел