VSCode IntelliSense предлагает файл .h, но отмечает, что он не найден - PullRequest
0 голосов
/ 28 мая 2019

Я не могу скомпилировать простой тупой демонстрационный «проект» с использованием Visual Studio Code.

Поскольку я пытаюсь пополнить свой портфель знаний, я пытаюсь выучить основы вручную, а я пытаюсь говорить.компилировать код вручную, без этого Visual Studio Enterprise IDE делает все автоматически.Поэтому я решил использовать Visual Studio Code на Mac + clang ++ для простого демонстрационного проекта.

Моя проблема: у меня есть рабочее пространство.В этом рабочем пространстве у меня есть несколько каталогов.Один из этих каталогов, называемый «Функции и заголовки», снова содержит каталоги: debug, release, include, src.В каталоге src у меня есть файл functions.cpp, содержащий два фиктивных метода:

int add(int x, int y)
{
    return x + y;
}

int subtract(int x, int y)
{
    return x - y;
}

и в main.cpp:

#include "functions.h"

int main()
{
    int x = add(1, 3);
    int y = subtract(5,1);
    return 0;
}

В моей папке includeУ меня есть два объявления метода:

int add(int x, int y);
int subtract(int x, int y); 

Интересный момент: когда я нахожусь в main.cpp и я набираю #include ", тогда IntelliSense находит functions.h и предлагает мне этот файл.Кроме того, вызовы методов выделены правильно.Но: после включения файла код Visual Studio помечает файл как прочитанный и сообщает: файл functions.h не найден.

Это ошибка Visual Studio Code?Потому что я также посмотрел на настройки, и настройки кажутся нормальными (см. Рисунок).

Clang пишет:

Ginos-MBP:src ginovalentinopensuni$ clang++ functions.cpp main.cpp main.cpp:2:10: fatal error: 'functions.h' file not found
#include "functions.h"
         ^~~~~~~~~~~~~ 1 error generated.

Я что-то пропускаю или я делаю что-то не так?Я также рассмотрел другие подобные вопросы здесь, но ничего полезного не было.

Изображения:

Settings File main.cpp File

1 Ответ

2 голосов
/ 30 мая 2019

Действительно. Путь включения VSCode, который разрешал автозаполнение #include "functions.h", не имеет отношения к тому, что является допустимым путем к компилятору. Есть два способа решения этой проблемы:

Исправить путь в исходном файле

Поскольку вы включаете заголовок functions.h из каталога ./src, попробуйте вместо этого написать:

#include "../include/functions.h"

int main()
{
    int x = add(1, 3);
    int y = subtract(5,1);
    return 0;
}

Это должно работать. Если для компилятора не указан конкретный путь включения, clang++, как и большинство других компиляторов C ++, будет интерпретировать путь относительно местоположения исходного файла. В этом случае ему нужно перейти в каталог, а затем в каталог include, чтобы найти файл заголовка functions.h.

Добавить включаемый путь к clang++

Из прочтения справочной страницы clang++ можно убедиться, что флаг -I может использоваться для указания дополнительного пути включения для поиска компилятором для поиска файлов заголовков. Итак, предполагая, что команда была запущена из каталога ./, один прыжок из каталога src и корня проекта:

clang++ src/main.cpp -I./include

также поможет решить проблему.

...