Я новичок в 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. Почему у меня возникают эти проблемы?
Вы пытались скомпилировать его напрямую? Вызовите clang++ с вашим файлом в качестве аргумента, если он работает, то это проблема VSCode, а не проблема компилятора.
Я думаю, интуиция такова, что includePath
предназначен только для «intellisense», он не влияет на компилятор. Теперь, почему ваш компилятор не может найти заголовочные файлы, это другой вопрос. Как говорит Каллдр, вы должны попробовать использовать свой компилятор вне VSCode, чтобы выяснить, является ли это проблемой компилятора или проблемой VSCode.
@NovusEdge Я заменил все три, но компилятор все еще возвращает те же ошибки. Он продолжает говорить мне обновить мой includePath
@ rjc810 Этот совет неверен (за исключением, возможно, диагностического инструмента). #include <iostream>
правильный код.
@john извините, я новичок в этом, как мне попытаться скомпилировать его вне кода vs? мне просто запустить clang++ helloworld.cpp внутри терминала?
@ rjc810 Это было бы началом, попробуйте и сообщите о любой ошибке.
Компилятор возвращает 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 Ну, это означает, что из командной строки компилятор может найти файлы заголовков (поскольку ошибки, которые у вас есть, после этого). Так что это похоже на проблему VSCode. Извините, но я ничего не знаю о VSCode на Mac.
Эта страница помогла мне правильно настроить его с помощью компилятора CLang code.visualstudio.com/docs/cpp/config-clang-mac
Ваш includePath имеет только ${workspaceFolder}
. Вам нужно добавить путь к вашему системному каталогу. Запустите эту команду и убедитесь, что все распечатанные пути указаны в вашем файле c_cpp_properties.json: gcc -v -E -x c++ -
Откройте приложение терминала и выполните указанную выше команду.
Я скопировал все пути в массив 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/include", "/Library/Developer/CommandLineTools/usr/include ", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
обновление: удаление строки workspaceFolder, кажется, удовлетворяет компилятор. Я все еще получаю сообщение об ошибке из этой строки. vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "и расширение C++!"}; Компилятор говорит мне, что в конце объявления ожидается точка с запятой, но после моего массива точка с запятой. Я пропустил что-то тривиальное здесь? Спасибо!
Попробуйте установить расширение «Включить автозаполнение» в vscode.
установил расширение. не уверен, почему код дает мне ошибки, так как я скопировал его прямо из учебника vscode. это может быть проблема с моей версией vscode?
О, мне очень жаль. Вы установили расширение «C/C++» в vscode?
Не беспокойся! Я установил его, но все еще получаю ошибки в этой строке кода: vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
Столкнулся с такой же проблемой Аллен, и этот способ сработал. Не могли бы вы уточнить, что на самом деле делает эта команда. Новичок здесь.
Что делать, если у меня нет файла c_cpp_properties.json? Я могу строить и запускать, но sguigglies остаются.
Убедитесь, что компилятор в настройке compilerPath
существует и поддерживает C++.
Я видел, что эти stdlib включают ошибки в системе ( CentOS ), в которой был установлен GCC без поддержки C++. Установка отсутствующего пакета исправила ошибки в Visual Studio Code. Неспособность скомпилировать hello.cpp из терминала ясно показала, что моя основная проблема не в коде Visual Studio.
У меня была такая же проблема, и я пытался заставить ее работать.
Затем я понял, что когда я назвал файл, я назвал его только helloworld вместо helloworld.cpp, так как это не было необходимо в других IDE, которые я использовал.
Но <iostream>
— это стандартный заголовок, а не пользовательский файл.
Вам нужно изменить только 3 раза в файле c_cpp_properties.json
.
"имя": "Мак"
добавьте "usr/include/linux" в "includePath"
"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++ -
cntrl + p
в коде vscode)Вместо скриншота добавьте код или текст.
Попробуйте заменить
<iostream>
на"iostream"
... Между<header_file>
и"header_file"
есть разница Вот что вам может пригодиться: stackoverflow.com/questions/21593/…