Sdílet prostřednictvím


Závažná chyba C1083

Soubor filetype nelze otevřít: 'file': message

Poznámky

Kompilátor vygeneruje chybu C1083, když nemůže najít soubor. Existuje mnoho možných příčin této chyby. Mezi nejběžnější příčiny patří nesprávná cesta hledání nebo chybějící nebo nesprávně pojmenováné soubory hlaviček, ale jiné typy souborů a problémy můžou způsobit také C1083. Tady je několik běžných důvodů, proč kompilátor tuto chybu vygeneruje.

Zadaný název souboru je chybný

Název souboru může být nesprávně natypovaný. Příklad:

#include <algorithm.h>

nemusí najít soubor, který chcete. Většina souborů hlaviček standardní knihovny C++ nemá příponu .h názvu souboru. Tato #include direktiva nenajde hlavičku <algorithm> . Pokud chcete tento problém vyřešit, ověřte, že je zadán správný název souboru, a to následujícím způsobem:

#include <algorithm>

Některé hlavičky knihovny prostředí runtime jazyka C jsou umístěny v podadresáři standardního adresáře vkládaných souborů. Pokud například chcete zahrnout sys/types.h, musíte do direktivy zahrnout sys název #include podadresáře:

#include <sys/types.h>

Soubor není součástí cesty hledání zahrnutí.

Kompilátor nemůže soubor najít pomocí pravidel vyhledávání pro direktivu nebo #include direktivu#import. Pokud je například název souboru záhlaví uzavřený do uvozovek,

#include "myincludefile.h"

Tím kompilátoru řeknete, aby nejprve hledal soubor ve stejném adresáři, který obsahuje zdrojový soubor, a pak se podíval do jiných umístění určených prostředím sestavení. Pokud uvozovky obsahují absolutní cestu, hledá kompilátor soubor pouze na tomto místě. Pokud uvozovky obsahují relativní cestu, hledá kompilátor soubor v adresáři relativním ke zdrojovému adresáři.

Pokud je název uzavřený úhlovými závorkami,

#include <stdio.h>

kompilátor se řídí vyhledávací cestou definovanou prostředím sestavení, možností kompilátoru /I , možností kompilátoru /X a proměnnou prostředí INCLUDE . Další informace, včetně konkrétních podrobností o pořadí hledání použitém k vyhledání souboru, najdete v tématu #include Direktiva (C/C++) a #import direktivy.

Pokud jsou soubory zahrnutí v jiném adresáři vzhledem ke zdrojovému adresáři a použijete relativní cestu ve direktivách include, musíte místo úhlových závorek použít dvojité uvozovky. Pokud je například soubor myheader.h záhlaví v podadresáři zdrojů projektu pojmenovaných záhlaví, tento příklad soubor nenajde a způsobí C1083:

#include <headers\myheader.h>

ale tento příklad funguje:

#include "headers\myheader.h"

Relativní cesty je možné použít také s adresáři v cestě hledání zahrnutí. Pokud přidáte adresář do proměnné prostředí INCLUDE nebo do cesty Include Directorys v sadě Visual Studio, nepřidávejte část cesty k direktivám include. Pokud je například záhlaví umístěné na \path\example\headers\myheader.hadrese a přidáte \path\example\headers\ do cesty Include Directories v sadě Visual Studio, ale vaše #include direktiva odkazuje na soubor jako

#include <headers\myheader.h>

pak soubor nebyl nalezen. Použijte správnou cestu vzhledem k adresáři zadanému v cestě include search. V tomto příkladu můžete změnit cestu k zahrnutí hledání na \path\example\nebo odebrat headers\ segment cesty ze direktivy #include .

Problémy s knihovnou třetích stran a vcpkg

Pokud se při pokusu o konfiguraci knihovny třetí strany v rámci sestavení zobrazí tato chyba, zvažte instalaci a sestavení knihovny pomocí nástroje vcpkg, správce balíčků C++. vcpkg podporuje rozsáhlý a rostoucí seznam knihoven třetích stran a nastaví všechny vlastnosti konfigurace a závislosti potřebné pro úspěšné sestavení v rámci projektu.

Soubor je ve vašem projektu, ale ne v cestě hledání zahrnutí.

I když jsou soubory hlaviček uvedené v Průzkumník řešení jako součást projektu, kompilátor je najde pouze v případě, že se na ně odkazuje #include zdrojový soubor nebo #import direktiva a nachází se v cestě include search. Různé druhy sestavení mohou používat různé vyhledávací cesty. Možnost kompilátoru /X lze použít k vyloučení adresářů z cesty hledání zahrnutí. To umožňuje, aby různá sestavení používala odlišné vkládané soubory, které mají stejný název, ale jsou uloženy v různých adresářích. Jedná se o alternativu k podmíněné kompilaci pomocí příkazů preprocesoru. Další informace o možnosti kompilátoru /X najdete v tématu /X (Ignorování standardních cest zahrnutí).

Chcete-li tento problém vyřešit, opravte cestu, kterou kompilátor používá k hledání vkládaného nebo importovaného souboru. Nový projekt používá výchozí cesty hledání. Je možné, že budete muset upravit cestu hledání zahrnutí a přidat adresář pro váš projekt. Pokud kompilujete na příkazovém řádku, přidejte cestu k proměnné prostředí INCLUDE nebo možnost kompilátoru /I , abyste zadali cestu k souboru.

Chcete-li nastavit cestu k adresáři include v sadě Visual Studio, otevřete dialogové okno Stránky vlastností projektu. V části Vlastnosti konfigurace v levém podokně vyberte adresářeVC++ a pak upravte vlastnost Zahrnout adresáře. Další informace o adresářích pro jednotlivé uživatele a jednotlivé projekty hledané kompilátorem v sadě Visual Studio najdete v tématu Stránka vlastností adresářů VC++. Další informace o možnosti kompilátoru /I najdete v tématu /I (Další adresáře zahrnutí).

Prostředí INCLUDE nebo LIB příkazového řádku není nastavené.

Při vyvolání kompilátoru z příkazového řádku se k určení vyhledávací cesty často používají proměnné prostředí. Pokud cesta hledání popsaná proměnnou prostředí INCLUDE nebo LIB není správně nastavená, je možné vygenerovat chybu C1083. Důrazně doporučujeme použít zástupce příkazového řádku pro vývojáře k nastavení základního prostředí pro sestavení příkazového řádku. Další informace naleznete v tématu Sestavení C/C++ na příkazovém řádku. Další informace o tom, jak používat proměnné prostředí, naleznete v tématu Postupy: Použití proměnných prostředí v sestavení.

Soubor může být uzamčený nebo používán.

Pokud k úpravám nebo přístupu k souboru používáte jiný program, může mít soubor uzamčený. Zkuste zavřít soubor v jiné aplikaci. Pokud používáte možnosti paralelní kompilace, může být druhý program samotný visual Studio. Pokud možnost paralelního sestavení vypne, dojde k chybě, je to problém. Tento problém můžou mít i jiné paralelní systémy sestavení. Dávejte pozor, abyste nastavili závislosti souborů a projektů, aby pořadí sestavení bylo správné. V některýchpřípadechch Někdy antivirové programy dočasně uzamknou nedávno změněné soubory pro kontrolu. Pokud je to možné, zvažte vyloučení adresářů sestavení projektu z antivirového skeneru.

Je vložena chybná verze souboru

Chyba C1083 může také označovat, že je vložena chybná verze souboru. Například sestavení může obsahovat nesprávnou verzi souboru, který má direktivu #include pro hlavičkový soubor, který není určený pro toto sestavení. Některé soubory se můžou například vztahovat jenom na sestavení x86 nebo na sestavení Ladění. Pokud se soubor záhlaví nenajde, kompilátor vygeneruje chybu C1083. Tento problém vyřešíte použitím správného souboru, nikoli přidáním hlavičkového souboru nebo adresáře do sestavení.

Předkompilované hlavičky ještě nejsou předkompilované.

Pokud je projekt nakonfigurovaný tak, aby používal předkompilované hlavičky, musí být vytvořeny relevantní .pch soubory, aby bylo možné zkompilovat soubory, které používají obsah záhlaví. Například soubor pch.cpp (stdafx.cpp v sadě Visual Studio 2017 a starší) se automaticky vytvoří v adresáři projektu pro nové projekty. Tento soubor zkompilujte jako první, abyste vytvořili předkompilované hlavičkové soubory. V typickém návrhu procesu sestavení se to provádí automaticky. Další informace naleznete v tématu Vytváření předkompilovaných hlavičkových souborů.

Jiné příčiny

  • Nainstalovali jste sadu SDK nebo knihovnu třetích stran, ale neotevřeli jste nový příkazový řádek pro vývojáře. Pokud sada SDK nebo knihovna přidává soubory do cesty INCLUDE , možná budete muset otevřít nové okno příkazového řádku pro vývojáře, abyste tyto změny proměnných prostředí vybrali.

  • Soubor používá spravovaný kód, ale není zadána možnost /clr kompilátoru. Další informace naleznete v tématu /clr (Common Language Runtime Compilation).

  • Soubor je zkompilován pomocí jiného /analyze nastavení možností kompilátoru, než se používá k předkompilování hlaviček. Když jsou hlavičky projektu předkompilované, měly by všechny používat stejná /analyze nastavení. Další informace najdete v tématu /analyze (Analýza kódu).

  • Soubor nebo adresář byl vytvořen Subsystém Windows pro Linux, je povolena citlivost písmen pro jednotlivé adresáře a zadaný případ cesty nebo souboru neodpovídá případu cesty nebo souboru na disku.

  • Soubor, adresář nebo disk je určen jen pro čtení.

  • Visual Studio nebo nástroje příkazového řádku nemají dostatečná oprávnění ke čtení souboru nebo adresáře. K tomu může dojít například v případě, že soubory projektu mají jiné vlastnictví než proces spuštěný v sadě Visual Studio nebo nástroje příkazového řádku. Někdy může být tento problém vyřešen spuštěním sady Visual Studio nebo příkazového řádku vývojáře jako správce.

  • K dispozici není dostatek popisovačů souborů. Ukončete některé aplikace a opakujte kompilaci. Tento stav je za typických okolností neobvyklý. Může se však vyskytnout při sestavování rozsáhlých projektů na počítači s omezenou fyzickou pamětí.

Příklad

Následující příklad vygeneruje chybu C1083 v případě, že soubor "test.h" záhlaví neexistuje ve zdrojovém adresáři nebo v cestě hledání include.

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

Informace o vytváření projektů C/C++ v integrovaném vývojovém prostředí nebo příkazovém řádku a informace o nastavení proměnných prostředí naleznete v tématu Projekty a systémy sestavení.

Viz také