VS2003 не может найти файл .h даже после добавления в «дополнительные, включая каталоги». каталоги»

#c #visual-studio

#c #visual-studio

Вопрос:

У меня есть файл, который должен включать blah.h в другой проект. Я попытался добавить каталог, содержащий файл blah.h, в

 Project -> Project Properties -> Additional include directories
  

но я продолжаю получать «C1083: не удается открыть включаемый файл: blah.h: такого файла или каталога нет». Я пробовал абсолютные и относительные пути к папке, содержащей blah.h, но безуспешно.

Я использую Visual Studios 2003. и мой оператор include выглядит следующим образом

 #include "blah.h"
  

Есть предложения?

Комментарии:

1. Как выглядит ваше свойство «Дополнительные включаемые каталоги»?

2. Спасибо, что изучили это. У меня не будет доступа к компьютеру с кодом на нем до понедельника, после чего я свяжусь с вами.

Ответ №1:

Заставьте сборку (или, по крайней мере, эту часть сборки) работать, используя:

 #include "c:/path/to/blah.h"
  

Если / когда VS перестанет жаловаться на невозможность поиска blah.h , вырежьте и вставьте путь, используемый в #include , в «Дополнительные включаемые каталоги». Помните, что в поле «Дополнительные включаемые каталоги» каталоги должны быть разделены точкой с запятой.

Кроме того, убедитесь, что вы установили свойство «Дополнительные включаемые каталоги» для всех соответствующих конфигураций сборки и платформ (выпадающие списки в верхней части диалогового окна страницы свойств проекта). Поскольку диалоговое окно открывается только с выбранной конфигурацией «Active», я часто обнаруживаю, что настраиваю параметр только для конфигурации «Debug» / «Win32», а затем на секунду задаюсь вопросом, что пошло не так, когда я получаю ошибки после переключения на конфигурацию «Release» или «x64».

Комментарии:

1. Спасибо. Хотя это не было прямым решением, это помогло мне прийти к окончательному решению (редизайн структуры проекта).

2. @jok3maut: если это не слишком сложно, я думаю, что наличие вашего собственного ответа (или даже редактирования вопроса), описывающего реальную проблему и решение, было бы полезно для любого, кто столкнется с этим в поиске.

Ответ №2:

Для решения подобных проблем я использую ProcessMonitor, бесплатную утилиту от Microsoft. Помимо прочего, он регистрирует обращения к файлам. Отфильтруйте blah.h, посмотрите, какой путь Visual Studio действительно использует, затем при необходимости измените «Дополнительные включает».

Ответ №3:

Хорошо, вот моя проблема и решение, которое я придумал:

У меня есть решение для нескольких проектов в VS2003. В одном проекте у меня есть дочерний класс с шаблоном, определенный в Bar.h, который наследуется от родительского класса без шаблона в Foo.h. У родительского класса в нем объявлен статический член some_mutex. Это означало, что мне нужно было определить some_mutex в Foo.cpp .

Проблема возникла, когда я попытался включить Bar.h в файлы в других проектах, например other.vcproj. Без добавления пути включения к Bar.h в other.vcproj я бы получил ошибку C1083, потому что компилятор не смог найти определение для дочернего файла. Но когда я добавил включаемый путь Bar.h к other.vcproj, я бы получил ошибку LNK2001 для some_mutex, потому что Foo.cpp был в другом проекте и не включался / не компилировался. Это означало, что some_mutex не определен и это вызвало ошибку LNK2001.

Решением было поместить Foo.h, Foo.cpp и Bar.h в их собственном проекте NewProj и создают статическую библиотеку. Другим проектам, которые хотели использовать дочерний класс, просто нужно было включить NewProj.lib, добавить путь к NewProj.lib и добавить путь включения к Bar.h.

Ответ №4:

Если вы ввели путь к каталогу «blah.h» как относительный путь, имейте в виду, что VS2008 интерпретирует эти пути относительно каталога, содержащего файл проекта .vcproj. Поэтому вам нужно будет решить, что это будет.

Если ваш файл C «C:myprogramsourcefoo.cpp «и ваш включаемый файл является «C:myprogramincludesblah.h «недостаточно указать путь для включения «..включает». Вы должны выяснить, где находится файл вашего проекта. Если это «C:myprogrambuildmysolutionmyprogrammyprogram.vcproj » тогда путь включения должен быть «.. .. ..включает».