#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 » тогда путь включения должен быть «.. .. ..включает».