Код Visual Studio не может открыть исходный файл «iostream»

Я новичок в C++ и Visual Studio Code, поэтому не знаю, как решить эту проблему. Я пытался пройти обучение в Использование Clang в коде Visual Studio , но я не могу вставить их код « Hello, World!» без ошибок iostream, vector и string.

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

Код, который вызывает эти ошибки, был скопирован непосредственно из учебника выше:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}

В первых трех строках я получаю ошибки "cannot open source file {the included import's name}". Компилятор утверждает, что:

#include обнаружены ошибки. Пожалуйста, обновите ваш includePath. Для этой единицы перевода отключены волнистые линии (/Users/rjc/projects/helloworld/helloworld.cpp).C/C++(1696)

Я добавил эту строку в свой includePath как таковой (состояния страницы конфигурации добавляют один includePath на строку, поэтому я поместил эти два оператора в отдельные строки):

${workspaceFolder}/**/Users/rjc/projects/helloworld/

Но это не уменьшило количество ошибок. Я не совсем уверен, что здесь делать, так как учебник, похоже, не работает для меня.

Я использую macOS 11.1 (Big Sur) с Clang версии 12.0.0. Почему у меня возникают эти проблемы?

Попробуйте заменить <iostream> на "iostream"... Между <header_file> и "header_file" есть разница Вот что вам может пригодиться: stackoverflow.com/questions/21593/…

Novus Edge 23.12.2020 09:37

Вы пытались скомпилировать его напрямую? Вызовите clang++ с вашим файлом в качестве аргумента, если он работает, то это проблема VSCode, а не проблема компилятора.

Kaldrr 23.12.2020 09:39

Я думаю, интуиция такова, что includePath предназначен только для «intellisense», он не влияет на компилятор. Теперь, почему ваш компилятор не может найти заголовочные файлы, это другой вопрос. Как говорит Каллдр, вы должны попробовать использовать свой компилятор вне VSCode, чтобы выяснить, является ли это проблемой компилятора или проблемой VSCode.

john 23.12.2020 09:44

@NovusEdge Я заменил все три, но компилятор все еще возвращает те же ошибки. Он продолжает говорить мне обновить мой includePath

rjc810 23.12.2020 09:45

@ rjc810 Этот совет неверен (за исключением, возможно, диагностического инструмента). #include <iostream> правильный код.

john 23.12.2020 09:45

@john извините, я новичок в этом, как мне попытаться скомпилировать его вне кода vs? мне просто запустить clang++ helloworld.cpp внутри терминала?

rjc810 23.12.2020 09:47

@ rjc810 Это было бы началом, попробуйте и сообщите о любой ошибке.

john 23.12.2020 09:48

Компилятор возвращает helloworld.cpp:9:23: ошибка: ожидается ';' в конце объявления vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "an... ^ ; helloworld.cpp:11:29: предупреждение: диапазон- основанный на цикле for является расширением С++ 11 [-Wc++11-extensions] for (const string& word : msg) Не знаю, откуда исходит первая ошибка, поскольку эта строка (полностью) является ``` vector< string> msg {"Hello", "C++", "World", "from", "VS Code", "и расширение C++!"}; ```

rjc810 23.12.2020 09:49

@ rjc810 Ну, это означает, что из командной строки компилятор может найти файлы заголовков (поскольку ошибки, которые у вас есть, после этого). Так что это похоже на проблему VSCode. Извините, но я ничего не знаю о VSCode на Mac.

john 23.12.2020 09:53

Эта страница помогла мне правильно настроить его с помощью компилятора CLang code.visualstudio.com/docs/cpp/config-clang-mac

darul75 30.12.2021 15:49
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
10
68 595
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Ваш includePath имеет только ${workspaceFolder}. Вам нужно добавить путь к вашему системному каталогу. Запустите эту команду и убедитесь, что все распечатанные пути указаны в вашем файле c_cpp_properties.json: gcc -v -E -x c++ -

Откройте приложение терминала и выполните указанную выше команду.

Allen ZHU 23.12.2020 09:49

Я скопировал все пути в массив includePath в properties.json, но все равно получаю те же ошибки. У меня есть "${workspaceFolder}/**", "/usr/local/include", "/Library/Developer/CommandLineTools/usr/bin/../include/c++/‌​v1", "/Library/Developer /CommandLineTools/usr/lib/clang/12.0.0/include", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/inc‌​lude", "/Library/Developer/CommandLineTools/usr/include ", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/‌​Library/Frameworks"

rjc810 23.12.2020 09:54

обновление: удаление строки workspaceFolder, кажется, удовлетворяет компилятор. Я все еще получаю сообщение об ошибке из этой строки. vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "и расширение C++!"}; Компилятор говорит мне, что в конце объявления ожидается точка с запятой, но после моего массива точка с запятой. Я пропустил что-то тривиальное здесь? Спасибо!

rjc810 23.12.2020 09:59

Попробуйте установить расширение «Включить автозаполнение» в vscode.

Allen ZHU 23.12.2020 10:00

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

rjc810 23.12.2020 10:03

О, мне очень жаль. Вы установили расширение «C/C++» в vscode?

Allen ZHU 23.12.2020 10:14

Не беспокойся! Я установил его, но все еще получаю ошибки в этой строке кода: vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

rjc810 23.12.2020 16:29

Столкнулся с такой же проблемой Аллен, и этот способ сработал. Не могли бы вы уточнить, что на самом деле делает эта команда. Новичок здесь.

Abhinav 30.03.2021 08:11

Что делать, если у меня нет файла c_cpp_properties.json? Я могу строить и запускать, но sguigglies остаются.

lcj 06.04.2023 14:21

Убедитесь, что компилятор в настройке compilerPath существует и поддерживает C++.

Я видел, что эти stdlib включают ошибки в системе ( CentOS ), в которой был установлен GCC без поддержки C++. Установка отсутствующего пакета исправила ошибки в Visual Studio Code. Неспособность скомпилировать hello.cpp из терминала ясно показала, что моя основная проблема не в коде Visual Studio.

У меня была такая же проблема, и я пытался заставить ее работать.

Затем я понял, что когда я назвал файл, я назвал его только helloworld вместо helloworld.cpp, так как это не было необходимо в других IDE, которые я использовал.

Но <iostream> — это стандартный заголовок, а не пользовательский файл.

Toby Speight 11.11.2021 17:56

Вам нужно изменить только 3 раза в файле c_cpp_properties.json.

  1. "имя": "Мак"

  2. добавьте "usr/include/linux" в "includePath"

  3. "intelliSenseMode": "лязг-x64"

Это решение предназначено только для пользователей Linux.

В Ubuntu у меня были установлены разные версии gcc/g++.

Проверьте свою версию С++

c++ -v

Проверьте каталог /usr/include/c++ и если в нем отсутствует соответствующая версия (10/ или 11/ или 12/), установите ее sudo apt install libstdc++-XX. Пришлось установить libstdc++-12

sudo apt install libstdc++-12

Я работаю с компилятором mingw g++. Я тоже получил эту ошибку, когда запускал свою программу. Я просто изменил путь к компилятору. Это сработало в моем случае.

FWIW, у меня была аналогичная проблема на этой неделе при запуске нового проекта cpp - оказалось, что когда я переключился с Windows на Linux, в середине запуска проекта, я забыл обновить все свои пути в tasks.json и c_cpp_properties .json (внутри каталога .vscode), которые все еще использовали стандарты пути Windows (\ вместо /). Как только я это исправил, все стало хорошо. Между прочим, я сделал свой tasks.json массивом задач, а свой c_cpp_properties.json также массивом конфигураций, что позволило мне добавлять как параметры компилятора Windows, так и параметры компилятора linux по отдельности — при сборке я выбираю, какой из них использовать.

как сказано выше, вы должны

  • запустите эту команду в терминале: gcc -v -E -x c++ -
  • затем он показывает вам все пути для включения, как показано на изображении

  • теперь откройте поиск этого файла c_cpp_properties.json в коде vs (нажав cntrl + p в коде vscode)
  • теперь откройте файл c_cpp_properties.json и вставьте все пути к файлам, которые я отметил (которые могут быть более или менее в вашем случае), как показано на изображении.

  • и тогда вы готовы к работе!
  • УДАЧНОГО КОДИРОВАНИЯ!

Вместо скриншота добавьте код или текст.

varshneydevansh 22.05.2023 08:31

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