VSCode IntelliSense предлагает файл .h, но отмечает, что он не найден

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

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

Моя проблема: у меня есть рабочая область. В этом рабочем пространстве у меня есть несколько каталогов. Один из этих каталогов под названием «Функции и заголовки» снова содержит каталоги: отладка, выпуск, включение, 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? Потому что я также посмотрел настройки, и настройки вроде в порядке (см. рисунок).

Кланг пишет:

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.

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

Фотографий:

VSCode IntelliSense предлагает файл .h, но отмечает, что он не найденVSCode IntelliSense предлагает файл .h, но отмечает, что он не найден

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
362
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конечно. Путь включения 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

также решит поставленную задачу.

Другие вопросы по теме