Vs не видит заголовочные файлы

Обновлено: 02.07.2024

Это может быть очень простой вопрос, но я не смог его понять, поэтому любая помощь приветствуется.

У меня есть заголовок, который находится в общей папке, потому что я хочу использовать его, например, в нескольких проектах:

C: \ пользователь \ geninclude \ программа \ header.h

Я создал новый пустой проект с очень простым main, в основном я поставил

Затем я перешел к свойствам проекта, и в VC ++ во включенных каталогах добавил C: \ user \ geninclude \

Но когда я попытался собрать программу, программа сообщает мне, что не может найти header.h, потому что его нет в текущем каталоге или в пути к системе сборки.

Я также пробовал в свойствах проекта в общих дополнительных каталогах C / C ++ добавить C: \ user \ geninclude \, но все еще та же ошибка.

Я знаю, что мне не хватает чего-то простого, но я не знаю чего, я новичок в этом, просто учусь.

Для справки я использую Visual Studio 2013.

Спасибо заранее за вашу помощь.

ОБНОВЛЕНИЕ: Спасибо всем за ваши добрые ответы, я перепробовал все, что вы мне сказали (проверьте выпуск и отладку в обоих случаях, измените / на \ и <> на "", и дважды проверьте заголовок, но система все равно не видит это действительно очень странно. Я буду пытаться .

Пожалуйста, проверьте, действительно ли ваш файл является файлом заголовка, иначе он не появится в include.

Что вы также можете сделать (в качестве обходного пути, если вам нужен этот метод быстро), так это поместить файл заголовка (или папку с файлами заголовков) в папку «include» Visual Studio. Путь должен выглядеть так: «C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ include»

PS: Вам также следует проверить конфигурацию свойств при добавлении пути к каталогам включения VC ++. Вы можете добавить путь к конфигурации отладки и попытаться запустить ее в режиме выпуска.

Другая вещь, которая может привести к тому, что включаемые файлы не будут захвачены, - это разница между платформой, установленной на страницах свойств вашего проекта c ++, и вашей «платформой активного решения» в диспетчере конфигурации. Можно просто проверить, установлен ли один на x64, а другой на x86

enter image description here

Для пользователей Visual Studio 2019:

Обоснование: вы могли загрузить проект из Интернета, и они использовали другую версию Visual Studio в качестве платформы .

Обоснование: вы могли загрузить проект из Интернета, и они использовали версию SDK 8.0 , в то время как у вас есть SDK 10.0 0

Ты действительно хочешь

Свойства проекта -> Свойства конфигурации -> C / C ++ -> Дополнительные каталоги включения

Проверьте, правильно ли вы указали путь. например, я написал cpp вместо c ++ и поэтому много страдал и потратил, как час, на поиски тут и там.

Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними
Всем добрый вечер!) Относительно недавно стал изучать c/c++, хочу полюбопытствовать ,так как.

Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы?
Приветствую всех! Столкнулся с тем, что решая задачи по книге Лафоре про графику, не смог добавить.

Заголовочные файлы
Всем добрый день! Пытался найти информацию по созданию заголовочных файлов, да не нашел. У меня.

StillPlague, у вас не видит стандартные библиотеки, решения какие могут быть, это удостоверится что скачаны либы с++, потому что студию частенько можно поставить не указав что с++ нужен, ну или был сбой какой то при установке, просто переустановите

Добавлено через 1 минуту
сделайте скриншот вот этого
File -> new -> project (если там есть вкладка Visual C++ то ее сфоткайте, если нет то просто скрин)

StillPlague, ну все нормально, вроде скачано, тогда совет просто переустановить студию А есть какие-то нюансы при установки? Что выбирать и тд?

ну или попробуйте создать пустой проект, там вон есть по центру вкладка,
потом нажмите ctrl + alt + l, у вас появится менюшка, в ней тыкаете правой кнопкой по source files и добавляете один cpp файл с любым названием и в него код

Добавлено через 36 секунд
и важно не консольное приложание а там есть пустой проект

При нажатии Ctrl+alt+l пишет - "Этот элемент не поддерживает предварительный просмотр"

Добавлено через 1 минуту
Если удобно, может пойдем в скайп? Чтобы я через показ экрана всё показывал?

StillPlague, на всякий там буква Л ctrl + alt + L, вы так пробовали ?

Добавлено через 20 секунд
StillPlague, извините но сейчас не могу

Если ctrl alt l не получается, сверху вкладка view, и там solution explorer или по русски вид, обозреватель решений, как то так Не совсем понял что на 2ом скрине, но в остальном всё так же

Решение

StillPlague, ну у меня подозрения что пути в проекте, неправильно задаются автоматически, честно мой совет вам, просто переустановить То что у меня программа не на диске С стоит это влияет как-то?

Решение

сносите полностью студию,
и ставьте заново.
если ошибка повторится - сносите студию,
сносите дистрибутив,
выкачивайте заново с офф. сайта. То что у меня программа не на диске С стоит это влияет как-то? StillPlague, это потому что Вы прикреплённые темы не смотрите. А зря. У меня в подписи кликайте на ссылку с рекомендациями. Там есть маленькое наглядное GIF-руководство, как картинки вставлять. И много ещё другого, что тоже надо знать каждому форумчанину.

Заголовочные файлы (.h)
Доброго времени суток господа! Озадачился вопросом по поводу заголовочных файлов. Но подробного.


Заголовочные файлы
Подскажите, во время компоновки, в итоге, &quot;присоединяются&quot; к экзешнику все функции/объекты и тдп.

Заголовочные файлы
Подключил два заголовочных файла, при компиляции пишет, что не знает имени функции Header.h .

Заголовочные файлы *.h
Доброго времени суток! Как понят следующее: В заголовочных файлах, в целях более быстрой.

У меня возникла проблема с видимостью заголовочных файлов в моем проекте Windows Forms (Visual Studio 2017). Я включил все заголовочные файлы в отдельный заголовочный файл под названием "Header.h". В первом файле под названием "welcome.h" я хочу вызвать следующую форму, как показано ниже.

Это то, что я получаю, когда пытаюсь скомпилировать его.


Это на самом деле не имеет смысла для меня, поскольку initial является членом бета-версии, как показано на этом скриншоте.


Вот как я включаю файлы заголовков в Header.h .

Каждый другой заголовочный файл содержит.

Я также проверил, будет ли каждый файл включен в проект, и все находится в одной папке. Что мне не хватает?

PS Это мой первый пост, здесь, поэтому, если мой вопрос непонятен, тогда, пожалуйста, направляйте меня.

спросил(а) 2021-01-27T14:34:39+03:00 9 месяцев, 3 недели назад

Очень часто это не ваша проблема, а Visual Studio, потому что вы просто обновили свои пакеты через "Управление пакетами Nuget для решения" сразу после открытия нового проекта.

Пожалуйста, НЕ делайте этого, если вам не нужно.

Обновленные пакеты не могут так быстро адаптироваться друг к другу, и у вас будут проблемы.

Если вам НЕОБХОДИМО обновить, сделайте это с другим старым проектом, а затем создайте новый проект без обновления пакетов.

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

Тогда я подумал, что это может быть обновление (потому что я исчерпал все остальные пути). Поэтому я перестроил свой проект без обновления пакетов, и BANG! Я понял - появился заголовок! Я был так рад!

Я создал пустой "демонстрационный" проект в Visual Studio 2008 и добавил некоторые существующие проекты в свое решение. Включен "Файл Myheader.h " (заголовок другого проекта) в main.cpp-файл, который находится в "Demo". Также добавлен путь к заголовочным файлам в разделе" Tools/Option/VC++ Directory/Include files". Но intellisense говорит: "файл 'MyHeader.h ' не найден в каталоге текущего исходного файла или в системных путях сборки. "

Как проблема может быть исправлена? Спасибо.

Если вы выберите Project а то All Files в меню все файлы должны отображаться в обозревателе решений, которые физически находятся на карте проекта, но еще не включены в проект. Если вы щелкните правой кнопкой мыши файл, который хотите добавить в Обозреватель решений, вы можете включить его.

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

Если это так, что только IDE указывает, что он не может найти включенные файлы, но компиляция успешна, проблема просто в том, что IntelliSense не полностью в курсе последних изменений. Это может произойти именно при включении существующих проектов, по моему собственному опыту. Удаление .sdf-файл (= база данных IntelliSense), созданный в каталоге решения, заставляет Visual Studio восстанавливать его, чтобы он снова был обновлен. Просто делать "чистый", вероятно, будет делать то же самое, но занимает больше времени, так как все будут сгенерированы снова.

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

попробуйте добавить файл заголовка в файлы вашего проекта. (щелкните правой кнопкой мыши проект - > добавить существующий файл).

Если visual studio говорит, что вы пропустите какой-то файл в текущей папке исходного файла, есть одно решение, которое я использовал. Просто щелкните правой кнопкой мыши файл, который вы хотите добавить, и выберите Open Document , если он действительно не существует, то вы должны увидеть что-то вроде cannot find file in the source file path = "somewhere in your computer" , тогда вы можете сначала добавить исходный файл в этот путь и посмотреть, работает ли он.

Это случилось со мной только что, после выключения и перезагрузки компьютера. В конце концов я понял, что архитектура каким-то образом была изменена на ARM из x64.

по моему опыту, с VS2010, когда include-файлы не могут быть найдены во время компиляции, выполняя очистку, тогда build обычно устраняет проблему. Не так уж редко редактор может открыть файл include, а затем компилятор объявить, что он не может найти этот самый файл, даже когда он открыт на экране!

Здравствуйте, Fylhe, Вы писали:

F>Я создал библиотеку (статическую), создал заголовочный файл для нее. В другом исходнике я пытаюсь использовать функцию из библиотеки, проинклудив в начале этот заголовочный файл. При компиляции Visual не ругается что не видит заголовочный файл, но ругается что функция из библиотеки не описана. В чем трабла?

1) Условная компиляция. Компилятор может проигнорировать твой файл или часть его содержимого.
2) Очепятка.
3) Бардак из инклудников, подцеплен не тот файл.

Ну и хорошо бы привести выдержки из кода.

Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Fylhe, Вы писали:

F>>Я создал библиотеку (статическую), создал заголовочный файл для нее. В другом исходнике я пытаюсь использовать функцию из библиотеки, проинклудив в начале этот заголовочный файл. При компиляции Visual не ругается что не видит заголовочный файл, но ругается что функция из библиотеки не описана. В чем трабла?

К>1) Условная компиляция. Компилятор может проигнорировать твой файл или часть его содержимого.
К>2) Очепятка.
К>3) Бардак из инклудников, подцеплен не тот файл.

К>Ну и хорошо бы привести выдержки из кода.

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

ну и хорошо бы привести выдержки из ругани

Здравствуйте, Fylhe, Вы писали:

F>Я создал библиотеку (статическую), создал заголовочный файл для нее. В другом исходнике я пытаюсь использовать функцию из библиотеки, проинклудив в начале этот заголовочный файл. При компиляции Visual не ругается что не видит заголовочный файл, но ругается что функция из библиотеки не описана. В чем трабла?
Целых два варианта.
1.Ты её не импортируешь __declspec(dllimport)
2.Ты её не экспортируешь в библиотеке. __declspec(dllexport) И в .def фаиле поставь на всякий

Здравствуйте, Fylhe, Вы писали:

F>Я создал библиотеку (статическую), создал заголовочный файл для нее. В другом исходнике я пытаюсь использовать функцию из библиотеки, проинклудив в начале этот заголовочный файл. При компиляции Visual не ругается что не видит заголовочный файл, но ругается что функция из библиотеки не описана. В чем трабла?

А ты часом не забываешь линкеру указать, чтоб он при линковке твою либу (.lib) цеплял?

Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Fylhe, Вы писали:

К>1) Условная компиляция. Компилятор может проигнорировать твой файл или часть его содержимого.
К>2) Очепятка.
К>3) Бардак из инклудников, подцеплен не тот файл.

К>Ну и хорошо бы привести выдержки из кода.

Ну код предельно простой — сам написал и библиотеку и прогу ее использующую, для изучения PE формата, последующего анализарования Идой. (Не спрашивайте зачем )
Писал на вижуале. В воркспейсе есть два проджекта. Одил библиотека и соотв-й эйч файл. Вот куски кода


И использующая библиотеку код:


Если прописать путь

Здравствуйте, Bork, Вы писали:

B>а еще (правда это уже к линкеру) функция может быть сишной а вызываться из с++. тогда в инклуднике функция должна быть описана как extern "C", иначе линкер будет искать декорированое имя.

В том то и дело что это к компилеру, уже на этом этапе ругань. Чтобы использовать имя, его надо описать (определение м.б. где-то еще — это проблемы линкера). Эту проблему и решает заголовочный файл. Но у меня что-то не решает

Здравствуйте, Teolog, Вы писали:

T>Здравствуйте, Fylhe, Вы писали:

F>>Я создал библиотеку (статическую), создал заголовочный файл для нее. В другом исходнике я пытаюсь использовать функцию из библиотеки, проинклудив в начале этот заголовочный файл. При компиляции Visual не ругается что не видит заголовочный файл, но ругается что функция из библиотеки не описана. В чем трабла?
T>Целых два варианта.
T>1.Ты её не импортируешь __declspec(dllimport)
T>2.Ты её не экспортируешь в библиотеке. __declspec(dllexport) И в .def фаиле поставь на всякий


Я создал библиотеку (статическую)

Здравствуйте, serge_levin, Вы писали:

_>Здравствуйте, Fylhe, Вы писали:

F>>Я создал библиотеку (статическую), создал заголовочный файл для нее. В другом исходнике я пытаюсь использовать функцию из библиотеки, проинклудив в начале этот заголовочный файл. При компиляции Visual не ругается что не видит заголовочный файл, но ругается что функция из библиотеки не описана. В чем трабла?

_>А ты часом не забываешь линкеру указать, чтоб он при линковке твою либу (.lib) цеплял?

Здравствуйте, Fylhe, Вы писали:


F>Если прописать путь


Ну точно, бардак из .h-файлов
Дело в том, что "math.h" — это имя, в том числе, файла из стандартной библиотеки.

Поэтому, когда ты пишешь имя без пути,

компилятор ищет его
1) в каталоге файла, который его включает
2) по путям, указанным в переменной окружения INCLUDE (а также в настройках Студии, если компилить в ней, а не в командной строке)
3) по путям, указанным в опциях компилятора (для VC это /I c:path\goes\here) — они задаются в свойствах проекта

А, скорее всего, your_exe.cpp и math.h лежат в разных каталогах. Поэтому включается не твой файл, а стандартный.

1. Указывать путь
Допустим, структура каталогов в твоём воркспейсе такая

Значит, включать его можно с относительным путём


2. Настроить проект
В свойствах проекта (экзешного) ищи пункт Additional include paths (или как он там?) и прописывай туда путь к либе.
Кстати, придётся ещё линкеру объяснить, где лежит math.lib.

Советы
1) Переименуй хедер, чтобы он не пересекался со стандартным. Скажем, yourmath.h
2) Организуй каталоги воркспейса.
3) В дальнейшем работай с относительными путями. Это позволит, скопировав воркспейс в другое место, не париться с настройками.

По организации каталогов. Предлагаю

В этом случае доступ к хедеру будет таким

Не забудь в свойствах каждого проекта указать, что результат линковки должен быть в папке ../Debug (общей для воркспейса), а не в Debug (проекта).

Это, возможно, не самое лучшее расположение: публикуемые хедеры и предназначенные для внутреннего использования оказались в одной куче.
Но на первое время — сойдёт.

Здравствуйте, Кодт, Вы писали:

насколько я помню , разница "" и <> при иклюде хидера означает, что в первом случае поиск хидера должен произходить в текущей директории, а уже потом в стандартных путях, а во втором наоборот.

Привет простой:
math.h

/* она нигде не определена */
void rama(int i);


/*
Пример 1
Все компилируется, но естественно не линкуется.
*/
c.cc


/*
Пример 2
Ошибка на стадии компиляции — не известный идентификатор
*/
c.cc

Здравствуйте, jdan, Вы сначала оверквотили , а затем писали:

J>насколько я помню , разница "" и <> при иклюде хидера означает, что в первом случае поиск хидера должен произходить в текущей директории, а уже потом в стандартных путях, а во втором наоборот.

Здравствуйте, Кодт, Вы писали:

К>Дополнение
К>>

Читайте также: