Где находятся заголовочные файлы visual studio
Я проверил копию приложения C++ из SourceForge (HoboCopy, если вам интересно) и попытался скомпилировать его.
Visual Studio говорит мне, что он не может найти конкретный заголовочный файл. Я нашел файл в исходном дереве, но куда его нужно поместить, чтобы он был найден при компиляции?
Существуют ли специальные каталоги?
На коробке CentOS 5.7 у меня возникли проблемы с установкой новейшей версии mysql2 gem; она не находит errmsg.h: /usr/bin/ruby extconf.rb checking for rb_thread_blocking_region(). yes checking for rb_wait_for_single_fd(). no checking for mysql_query() in -lmysqlclient. yes checking for.
Я установил visual studio 2010 ultimate version, и все работало отлично, и моя среда разработки работала хорошо. Однако недавно у меня возникла проблема, в которой каждый фрагмент кода выдает мне ошибку о том, что заголовочные файлы не найдены, например iostream stdio.h conio.h и т. д. Я точно.
Visual Studio ищет заголовки в следующем порядке:
- В текущем исходном каталоге.
- В дополнительных каталогах Include в свойствах проекта ( Project ->[project name] Properties , under C/C++ | General).
- В Visual Studio C++ включите каталоги в разделе Инструменты → Параметры → проекты и решения → каталоги VC++.
- В новых версиях Visual Studio (2015+) вышеуказанная опция устарела, и список каталогов по умолчанию include доступен в разделе свойства проекта → конфигурация → каталоги VC++
В вашем случае добавьте каталог, который является заголовком, в свойства проекта ( свойства проекта → конфигурация → C/C++ → общие → дополнительные каталоги включения ).
На самом деле в моем сообществе windows 10 с visual studio 2017 путь к заголовкам C++ :
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt
1-й содержит стандартные заголовки C++, такие как <iostream> , <algorithm> . 2-й содержит старые заголовки C, такие как <stdio.h> , <string.h> . Номер версии может отличаться в зависимости от вашего программного обеспечения.
Надеюсь, это поможет.
Если проект поставляется с файлом проекта Visual Studio, то он уже должен быть настроен для поиска заголовков для вас. Если нет, то вам придется добавить каталог включаемых файлов в настройки проекта, щелкнув правой кнопкой мыши проект и выбрав пункт Свойства, нажав на "C/C++", и добавив каталог, содержащий включаемые файлы, в поле редактирования "Additional Include Directories".
Я пытался сделать статический анализ кода в своем проекте, который в основном состоит из файлов .hpp, так как там все templated, но, к сожалению, я получаю информацию от PSV-Studio о том, что заголовочные файлы не могут быть обработаны. Это кажется немного странным. В современном C++ шаблоны есть.
Мой проект имеет около двадцати заголовочных файлов, и он начинает становиться привязкой для поиска по заголовочным файлам, чтобы найти нужный мне заголовочный файл. У меня есть классы с пространством имен, и каждое пространство имен-это, по сути, каталог. Как я могу просматривать заголовочные.
В Visual Studio 2010 диалог "Tools | Options | Projects and Solutions | VC++ Directories" сообщает, что" редактирование каталогов VC++ в сервисах > параметры устарело", предлагая использовать довольно нелогичный менеджер свойств.
Если вы действительно хотите обновить значение по умолчанию $(IncludePath), вам нужно взломать соответствующую запись в одном из файлов XML:
\Program файлов (x86)\MSBuild\Microsoft.Cpp\v4.0\платформ\с Win32\PlatformToolsets\твердотельного накопителя V100, если\Microsoft.Cpp.Win32.v100.props
\Program файлов (x86)\MSBuild\Microsoft.Cpp\v4.0\платформ\х64\PlatformToolsets\твердотельного накопителя V100, если\Microsoft.Cpp.X64.v100.props
(Вероятно, не рекомендуется Microsoft.)
Кажется, в сообществе Visual Studio 2015 есть ошибка. Для проекта 64-bit папка include не найдена, если она не находится в списке дополнительных папок Include конфигурации win32 bit.
Существует более новый вопрос, что лучше всего поражает проблему, спрашивая, как работают пути включения в Visual Studio?
В новых версиях VisualStudio раскрывается способ сделать это
- только в текущем проекте (так как вопрос задан и здесь), а также
- для каждого нового проекта по умолчанию
Второй - это то, что объясняет вышеприведенный ответ Стива Уилкинсона, который, как он сам предполагал, не является тем, что рекомендует Microsoft.
Чтобы сказать это коротко здесь: сделайте это, но сделайте это в пользовательском каталоге по адресу
и не в каталоге C:\program files, где, как ожидается, будет находиться неизмененный Заводской файл Microsoft.
Затем вы делаете это так же, как VisualStudio делает это тоже, и все происходит регулярно.
Для получения дополнительной информации о том, почему это нужно делать одинаково, смотрите мой ответ там .
Похожие вопросы:
Я нашел статью, где Visual Studio ищет заголовочные файлы C++? для начала неплохо, но у меня есть еще вопросы. Общий порядок, в котором VS ищет включаемые файлы, - это (1) локальный каталог, (2) те.
В системе Unix, где gcc ищет заголовочные файлы? Сегодня утром я потратил немного времени на поиски некоторых системных заголовочных файлов, поэтому подумал, что это будет хорошая информация.
Есть ли способ изменить, где visual studio ищет файлы проекта(.vcxproj)? Таким образом, я могу хранить все связанные файлы visual studio в отдельной папке VS и иметь мой проект все еще открытым и.
На коробке CentOS 5.7 у меня возникли проблемы с установкой новейшей версии mysql2 gem; она не находит errmsg.h: /usr/bin/ruby extconf.rb checking for rb_thread_blocking_region(). yes checking for.
Я установил visual studio 2010 ultimate version, и все работало отлично, и моя среда разработки работала хорошо. Однако недавно у меня возникла проблема, в которой каждый фрагмент кода выдает мне.
Я пытался сделать статический анализ кода в своем проекте, который в основном состоит из файлов .hpp, так как там все templated, но, к сожалению, я получаю информацию от PSV-Studio о том, что.
Мой проект имеет около двадцати заголовочных файлов, и он начинает становиться привязкой для поиска по заголовочным файлам, чтобы найти нужный мне заголовочный файл. У меня есть классы с.
Я разрабатываю проект в Visual Studio 2015 с C++/OpenGL и парой полезных библиотек. Я разделил свой собственный код на два основных каталога: /src для всех файлов .cpp и каталог / include для всех.
Я знаю изрядное количество Java и Eclipse IDE, но новичок в Visual Studio и C++. В Eclipse/Java,, если вы используете предопределенный класс, Eclipse услужливо предлагает соответствующий.
Я проверил копию приложения C++ из SourceForge (HoboCopy, если вам интересно) и попытался скомпилировать его.
Visual Studio говорит мне, что он не может найти конкретный файл заголовка. Я нашел файл в дереве источника, но куда его нужно поместить, чтобы он был найден при компиляции?
есть ли специальные каталоги?
в Visual Studio ищет заголовки в следующем порядке:
- В текущем каталоге.
- в дополнительных каталогах включить в свойства проекта (в разделе C++ | General).
- в Visual Studio C++ каталоги включения под инструменты → опции → проекты и решения → каталоги VC++.
в вашем случае добавьте каталог, который заголовок в свойствах проекта.
Если проект поставляется с файлом проекта Visual Studio, то это уже должно быть настроено для поиска заголовков для вас. Если нет, вам нужно будет добавить каталог include file в настройки проекта, щелкнув правой кнопкой мыши проект и выбрав Свойства, нажав "C/C++" и добавив каталог, содержащий файлы include, в поле редактирования "дополнительные каталоги Include".
в Visual Studio 2010 диалоговое окно "Инструменты | Параметры | проекты и решения | каталоги VC++" сообщает, что "редактирование каталогов VC++ в инструментах > параметры устарело", предлагая использовать довольно интуитивно понятный диспетчер свойств.
Если вы действительно хотите обновить $(IncludePath) по умолчанию, вам нужно взломать соответствующая запись в одном из XML-файлов:
\Program Files (x86)\MSBuild\Microsoft.СРР\В4.0\платформ\с Win32\PlatformToolsets\твердотельного накопителя V100, если\Майкрософт.СРР.С Win32.твердотельного накопителя V100, если.реквизит
\Program Files (x86)\MSBuild\Microsoft.СРР\В4.0\платформ\х64\PlatformToolsets\твердотельного накопителя V100, если\Майкрософт.СРР.Х64.твердотельного накопителя V100, если.реквизит
(вероятно, не рекомендуется Microsoft.)
кажется, в сообществе Visual Studio 2015 есть ошибка. Для 64-разрядного проекта папка include не найдена, если она не находится в конфигурации win32Дополнительно Включить Папки список.
существует более новый вопрос, что поражает проблему лучше спрашивать Как включить пути в Visual Studio?
там становится известно, как это сделать в более новых версиях VisualStudio
- только в текущем проекте (поскольку вопрос задан здесь), а также
- для каждого нового проекта по умолчанию
второй является то, что ответ Стива Уилкинсон выше объясняет, что, как он сам предположил, не то, что Microsoft порекомендовала бы.
скажи это shortway здесь: сделай это, но сделай это в пользовательском каталоге в
и не в C:\program файлы-каталог, в котором, как ожидается, будет находиться неизмененный Заводской файл Microsoft.
тогда вы делаете это так, как VisualStudio делает это тоже, и все регулярно.
для получения дополнительной информации, почему это так, см. Мой ответ здесь.
на самом деле на моем windows 10 с сообществом visual studio 2017 путь заголовков C++:
C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.15.26726\include
C:\Program Files (x86)\Windows Kits\Include.0.17134.0\ucrt
1-й содержит стандартные заголовки c++, таких как iostream , algorithm . 2-й содержит старые заголовки C, такие как stdio.h , string.h . Номер версии может отличаться в зависимости от программного обеспечения.
Я проверил копию приложения С++ из SourceForge (HoboCopy, если вам интересно) и попытался скомпилировать его.
Visual Studio сообщает мне, что он не может найти конкретный файл заголовка. Я нашел файл в исходном дереве, но где его нужно поместить, чтобы он был найден при компиляции?
Существуют ли специальные каталоги?
Visual Studio ищет заголовки в следующем порядке:
- В текущем исходном каталоге.
- В разделе "Дополнительные каталоги" в свойствах проекта ("Свойства проекта → [имя проекта]" в разделе "C/C++ | Общие").
- В Visual Studio C++ Включите каталоги в разделе Инструменты → Параметры → Проекты и решения → V C++ Каталоги.
- В новых версиях Visual Studio (2015+) вышеуказанная опция устарела, и список включаемых по умолчанию каталогов доступен в Свойства проекта → Конфигурация → V C++ Каталоги
В вашем случае добавьте каталог с заголовком в свойства проекта (Свойства проекта → Конфигурация → C/C++ → Общие → Дополнительные каталоги включения).
Если проект поставляется с файлом проекта Visual Studio, то он уже должен быть настроен для поиска заголовков для вас. Если нет, вам нужно будет добавить каталог файлов include к настройкам проекта, щелкнув правой кнопкой мыши проект и выбрав "Свойства", нажав "C/С++" и добавив каталог, содержащий включенные файлы, в "Дополнительные каталоги включения",.
На самом деле в моем windows 10 с сообществом visual studio 2017 путь заголовков C++:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt
Первый содержит стандартные заголовки C++, такие как <iostream> , <algorithm> . Второй содержит старые заголовки C, такие как <stdio.h> , <string.h> . Номер версии может отличаться в зависимости от вашего программного обеспечения.
Надеюсь, это поможет.
Попробовал добавить это как комментарий к Rob Prouse, но отсутствие форматирования сделало его непонятным.
В Visual Studio 2010 диалоговое окно "Инструменты | Параметры | Проекты и решения | VС++-каталоги" сообщает, что "Редактирование каталогов VС++ в" Инструменты " > " Параметры "устарело", предлагая использовать довольно интуитивно понятный Property Manager.
Если вы действительно хотите обновить значение по умолчанию (IncludePath), вам нужно взломать соответствующую запись в одном из файлов XML:
Имена программных элементов, таких как переменные, функции, классы и т. д., должны быть объявлены, прежде чем их можно будет использовать. Например, нельзя просто писать x = 42 без предварительного объявления "x".
Объявление сообщает компилятору, является ли элемент int , a double , функцией class или другим элементом. Кроме того, каждое имя должно быть объявлено (прямо или косвенно) в каждом cpp-файле, в котором он используется. При компиляции программы каждый CPP-файл компилируется независимо в единицу компиляции. Компилятор не имеет сведений о том, какие имена объявляются в других единицах компиляции. Это означает, что если вы определите класс или функцию или глобальную переменную, необходимо предоставить объявление этого объекта в каждом дополнительном cpp-файле, который его использует. Каждое объявление этого элемента должно быть точно одинаковым во всех файлах. Небольшая несогласованность вызовет ошибки или непреднамеренное поведение, когда компоновщик пытается объединить все единицы компиляции в одну программу.
в Visual Studio 2019 функция модулей c++ 20 появилась в качестве улучшения и в конечном итоге заменяет файлы заголовков. Дополнительные сведения см. в разделе Общие сведения о модулях в C++.
Пример
В следующем примере показан общий способ объявления класса и его использования в другом исходном файле. Начнем с файла заголовка, my_class.h . Он содержит определение класса, но обратите внимание, что определение не завершено; Функция-член do_something не определена:
В файле реализации при необходимости можно использовать using оператор, чтобы не указывать каждое упоминание "my_class" или "cout" с "N::" или "std::". Не помещайте using операторы в файлы заголовков!
После того как компилятор завершит компиляцию каждого CPP-файла в OBJ-файлы, он передает OBJ-файлы компоновщику. Когда компоновщик объединяет объектные файлы, обнаруживается только одно определение для my_class; Он находится в OBJ-файле, созданном для my_class. cpp, и сборка выполняется.
Включить условия
Что следует разместить в файле заголовка
Поскольку файл заголовка потенциально может включаться в несколько файлов, он не может содержать определения, которые могут формировать несколько определений с одним и тем же именем. Следующие действия не разрешены или считаются очень неправильными.
- встроенные определения типов в пространстве имен или глобальной области
- невстроенные определения функций
- определения неконстантных переменных
- агрегатные определения
- безымянные пространства имен
- Директивы using
Использование using директивы не обязательно приведет к ошибке, но может вызвать проблему, так как она переводит пространство имен в область каждого CPP-файла, который напрямую или косвенно включает этот заголовок.
Пример файла заголовка
В следующем примере показаны различные виды объявлений и определений, допустимых в файле заголовка.
Читайте также: