Не работает include в visual studio
Указывает препроцессору включить содержимое указанного файла в точку, где отображается директива.
Синтаксис
Remarks
Путь-Spec — это имя файла, которому при необходимости может предшествовать Спецификация каталога. Имя файла должно указывать на существующий файл. Синтаксис инструкции path-Spec зависит от операционной системы, в которой компилируется программа.
2) в каталогах открытых в данный момент файлов включения в порядке, в котором они были открыты. Поиск начинается в каталоге родительского включаемого файла, а затем выполняется в каталогах всех включаемых файлов-прародителей.
3) вдоль пути, указанного в каждом /I параметре компилятора.
1) вдоль пути, указанного в каждом /I параметре компилятора.
Как только препроцессор найдет файл с заданным именем, поиск останавливается. При заключении полной, неоднозначной спецификации пути для включаемого файла между двойными кавычками ( " " ) препроцессор выполняет поиск только по этой спецификации пути и игнорирует стандартные каталоги.
Если включаемые файлы являются вложенными и при компиляции происходит в командной строке, поиск в каталоге начинается в каталоге родительского файла. Затем он переходит по каталогам всех файлов «бабушке». Таким образом, поиск начинается относительно каталога, в котором находится исходный файл, обрабатываемый в текущий момент. Если файл не найден, Поиск перемещается в каталоги, заданные параметром компилятора /I (дополнительные каталоги включаемых файлов) . Наконец, выполняется поиск каталогов, заданных INCLUDE переменной среды.
в среде разработки Visual Studio INCLUDE переменная среды игнорируется. Вместо них используются значения, указанные в свойствах проекта для каталогов включения. дополнительные сведения о настройке каталогов включения в Visual Studio см. в разделе включаемые каталоги и дополнительные каталоги включаемыхданных.
В приведенном ниже примере демонстрируется включение файлов с помощью угловых скобок:
В этом примере в исходную программу добавляется содержимое файла с именем stdio.h . Угловые скобки приводят препроцессору для поиска в каталогах, заданных INCLUDE переменной среды для stdio.h , после того, как он выполняет поиск в каталогах, заданных /I параметром компилятора.
В следующем примере демонстрируется включение файлов, заданных в кавычках:
В примере добавляется содержимое файла, указанного defs.h в исходной программе. Кавычки означают, что препроцессор сначала попытается найти этот файл в каталоге, содержащем родительский исходный файл.
Только для систем Майкрософт
Чтобы найти исходные файлы для включения, препроцессор сначала выполняет поиск в каталогах, заданных /I параметром компилятора. Если /I параметр отсутствует или неисправен, препроцессор использует INCLUDE переменную среды для поиска всех включаемых файлов в угловых скобках. INCLUDE Переменная среды и /I параметр компилятора могут содержать несколько путей, разделенных точкой с запятой ( ; ). Если в качестве части /I параметра или переменной среды отображается несколько каталогов INCLUDE , препроцессор ищет их в том порядке, в котором они отображаются.
Представим себе следующую команду:
приводит к тому, что препроцессор ищет в каталоге D:\msvc\include\ включаемые файлы, например stdio.h . Ниже еще один пример:
Эта инструкция действуют точно так же. Если найти файл в обоих наборах каталогов не удастся, возникает неустранимая ошибка компилятора.
Если имя файла указано полностью для включаемого файла с путем, содержащим двоеточие (например, F:\MSVC\SPECIAL\INCL\TEST.H ), препроцессор следует за путем.
У меня возникла проблема, при которой VSCode распознает мое включение zipper.h, а затем неожиданно перевернуло меня и сказало, что такого файла или каталога нет. Я не уверен, если это проблема с моим кодом или включает или против кода.
Я попытался добавить его как к моему пути включения, так и к пути среды Windows. это продолжает терпеть неудачу по той же самой причине. Я очень смущен тем, что я делаю неправильно. Разве это не признание этих ссылок? Должен ли я компилировать библиотеки через g ++ при компиляции?
2 ответа
Вы ничего не сказали своему компилятору ни о файле с именем Zipper.h, ни о том, где он находится, ни о чем-либо связанном с ним. «g ++ test.cpp -o test» просто указывает компилятору скомпилировать исходный файл с именем test.cpp и связать его. Вы должны понимать, что код Visual Studio не является IDE и не может компилироваться сам по себе. У вас должен быть файл c_cpp_properties.json, расположенный в вашем каталоге .vscode. Например, тот, который я использую, выглядит так и настроен для mingw64.
Это сообщает Visual Studio Code, где находятся ваши исходные файлы и библиотеки. Это то, что используется для IntelliSense (подсветка синтаксиса, исправление ошибок, завершение кода и т. Д.). Однако это не имеет ничего общего с созданием вашего проекта. Ваш компилятор теперь не знает о пути включения, который вы задали в коде Visual Studio. Таким образом, чтобы скомпилировать ваш проект, вы должны рассказать своему компилятору все, что ему нужно знать. Visual Studio Code просто выполняет то, что вы указываете в задаче. Это то же самое, что перейти в этот каталог и ввести то же самое в командной строке. Поэтому я рекомендую вам прочитать о том, как скомпилировать проект c ++ с помощью g ++, ваша проблема вообще не связана с кодом Visual Studio. Если вы планируете заняться чем-то большим, чем просто один исходный файл, я настоятельно рекомендую вам изучить CMake. Компиляция путем ручного вызова gcc get становится действительно сложной, если у вас есть больше исходных файлов и включает / библиотеки для ссылок. После того, как вы настроили свой Cmake, вы можете просто указать задачу в коде Visual Studio, подобную этой, для создания своего проекта:
Это действительно хорошее объяснение того, что именно вы пытаетесь сделать в Microsoft, и помогло мне понять это, когда я начал использовать Visual Studio Code для своей работы на c ++.
Некоторые вещи, которые вы должны проверить:
Проверьте папку include в вашей версии VS (в " C:\Program Files\Microsoft Visual Studio xx.x\VC\include " проверьте файл, который вы включаете, iostream , убедитесь, что он там).
Проверьте свои проекты Включить каталоги в <Project Name> > Properties > Configuration Properties > VC++ Directories > Include Directories - (это должно выглядеть так: $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; )
Убедитесь, что вы выбрали правильный проект для этого кода ( File > New > Project > Visual C++ > Win32 Console Application )
Убедитесь, что в ваших кодовых файлах нет <iostream.h> , VS не поддерживает это (в том же проекте, проверьте ваши другие файлы кода,.cpp и .h файлы для <iostream.h> и удалите его).
Убедитесь, что у вас не более одной функции main() в вашем файлы проекта кода (в том же проекте, проверьте свои другие файлы кода, файлы .cpp и .h для функции main() и удалите его или замените другим именем).
Некоторые вещи, с которыми вы могли бы попытаться построить:
- Исключить using namespace std; из вашей функции main() и поместить ее после включения директивы.
- Используйте std::cout без using namespace std; .
Выше работали для меня. Ниже не было:
Это также не удалось:
Возможно, ваш компилятор и ресурсы, установленные вокруг него, были как-то неполными. Я рекомендую повторно установить ваш компилятор: он должен работать после этого.
У меня возникла эта ошибка, когда я создал консольное приложение "Пустое" в Visual Studio 2015. Я заново создал приложение, оставив флажок "Пусто", он добавил все необходимые библиотеки.
Это сделало это для меня.
Вот проект консоли С++ win32!
Теперь идет проект консоли С++ CLR!
другие вещи, которые вы узнаете из отладки, чтобы добавить для предотвращения ошибок
Я пытаюсь создать решение в Visual Studio Community 2017, но я продолжаю получать ошибку"не удается открыть файл include: 'stdio.h' ". Я прочитал несколько подобных вопросов, но все еще не могу решить эту проблему. Похоже на С stdio.h файл вызывается в stdafx.h. Ниже приведены более подробные сведения. Есть предложения? (Я еще не могу вставлять изображения, поэтому, пожалуйста, нажмите на ссылки для скриншотов.)
: 'С stdio.h': нет такого файла или каталога. Полная Ошибка:
детали устранения неполадок / вещи, которые я пробовал:
- свойства конфигурации > каталоги VC++
Include Directories $(VC_IncludePath);$(WindowsSDK_IncludePath); - скриншот: Обозреватель решений (файлы в проекте)
код stdafx.cpp:
код stdafx.h:
столкнулся с проблемой отсутствует stdlib.h и stdio.h (и, возможно, больше) после установки сообщества VS2017 на новый компьютер и переноса решения с VS2013 на VS2017.
теперь мои проекты строят без проблемы.
обратите внимание,что вам может потребоваться сделать проект стартовым проектом для переориентации.
существует три способа решить эту проблему.
Переустановите Visual Studio
Это также сработало для меня, потому что я понял, что, возможно, что-то не так с моим Windows SDK. Я использовал Windows 10, но с Windows SDK 8.1. Вы можете иметь эту проблему.
действия: открыть установщик Visual Studio > нажмите на трехстрочную строку меню > Удалить > перезагрузить компьютер > открыть установщик Visual Studio > Установите то, что вы хотите, но убедитесь, что вы устанавливаете только последнюю версию Windows SDK 10, а не несколько или 8.1.
на случай, если вы не хотите поднимать Windows SDK до Windows 10 (например, вы можете работать над проектом с открытым исходным кодом, где решение не ваше), вы можете решить эту проблему в проекте Windows SDK 8.1, перейдя Tools -> Get Tools and Features. -> Individual Compontents tab и установка отдельных компонентов "Windows 8.1 SDK" (под SDK, библиотеками и фреймворками) и "Windows Universal CRT SDK" (под Comiplers, инструментами сборки и временем выполнения):
У меня была аналогичная проблема после обновления моего VS2017. Проект построен хорошо, но много ошибок, когда код был воспитан в Редакторе. Даже попытался переустановить VS. Я смог решить его, установив параметр "игнорировать стандартные пути включения" в Yes. Попытка построить решение с большим количеством ошибок. Вернулся и установил параметр нет. После восстановления моя проблема исчезла.
У меня была та же проблема с созданием проекта VS 2013 с Visual Studio 2017 IDE. Решением было установить правильный " Platformtoolset v120 (Visual Studio 2013). Для этого должен быть установлен Windows SDK 8.1. Если вы хотите использовать Platformtoolset v141 (Visual Studio 2017), должен быть Windows SDK 10. Platformtoolset можно выбрать в диалоговом окне свойств проекта: общие - > Platformtoolset
Читайте также: