Я изучаю C++ и использую код Visual Studio для Mac. Я использую Code Runner для запуска своей программы. Моя проблема в том, что когда я использую что-то из C++ 11, например «auto» для объявления переменной, код Visual Studio выдает мне подобное предупреждение, но если я попытаюсь запустить его в Xcode или Eclipse, этого не произойдет:
warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
for(auto y: nstrVec)
Вот программа, если это необходимо:
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <numeric>
#include <sstream>
int main(){
std::vector<std::string> nstrVec(10);
std::string str("I'm a string");
nstrVec[0] = str;
std::cout << str.at(0) << "\n";
std::cout << str.front() << " " << str.back() << "\n";
std::cout << "Length " << str.length() << "\n";
// copies all characters after the fourth
std::string str2(str, 4);
for(auto y: nstrVec)
if (y != "")
std::cout << y << "\n";
return 0;
}
А это файл c_cpp_proprerties.json:
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/System/Library/Frameworks/Kernel.framework/Versions/A/Headers"
],
"defines": [],
"macFrameworkPath": [
"/System/Library/Frameworks",
"/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
@CoryKramer Вопрос касается VS Code, а не VS.
Вы говорите компилятору использовать 2 разных стандарта: у вас есть «-std = C++ 17» и «-std = C++ 11».
@FabioTurati Я пробовал использовать только один, но он все равно не сработал
Можете ли вы скомпилировать его из командной строки? То есть откройте оболочку, перейдите в этот каталог и введите g++ -std=c++17 -g helloworld.cpp -o helloworld: это работает?
@FabioTurati clang: ошибка: нет такого файла или каталога: 'helloworld.cpp' clang: error: нет входных файлов
Ваш путь к компилятору - "/usr/bin/clang", но тогда в задаче у вас есть "command": "g++". Какой компилятор вы установили?
@Bob__ я установил Xcode, который должен установить clang, но я попытался изменить команду на clang, но это ничего не меняет
helloworld.cpp.
дело в том, что я не использую задачу для запуска программы, я использую бегун кода расширения для ее запуска.
Это marketplace.visualstudio.com/…? Как выглядит его конфигурация?
@Bob__ // вы имеете в виду это: установите исполнителя для каждого языка "cpp": "cd $ dir && g ++ $ fileName -o $ fileNameWithoutExt && $ dir $ fileNameWithoutExt"
Что ж, ЕСЛИ вы используете это расширение для запуска программы (почему?), В командной строке после g++ (clang?) Добавьте -std=c++17.
@Bob__ СПАСИБО, ЧТО НАКОНЕЦ РЕШЕНИЕ ПРОБЛЕМЫ
Я рад, что вы смогли решить свою проблему, но, пожалуйста, не редактируйте свое сообщение, добавляя в заголовок «РЕШЕНО», Stack Overflow работает иначе. Правильный способ указать это - принять ответ, если он есть. Вы можете спросить @Bob__, заинтересован ли он в публикации такого письма; если нет, опубликуйте его сами и примите. Спасибо!





Для всех, кто приходит к этому вопросу, должен найти быстрый ответ (как это сделал я):
Следующая команда компилятора должна скомпилировать вашу программу main.cpp с последним стандартом C++ (C++ 17) и избавиться от предупреждающих сообщений, подобных описанному выше:
g++ -std=c++17 -g main.cpp -o main
Об этом много раз упоминается в комментариях, но я думаю, что на этот вопрос должен быть регулярный ответ.
У меня была такая же проблема, но я решил ее с помощью set vscode-user-settings <>
"clang.cxxflags": ["-std=c++14"]

Где ты нашел этот файл?
Я потратил так много времени сегодня, пытаясь понять, почему я получаю эту ошибку, и нигде не было точного ответа, который мне требовался, поэтому я решил опубликовать его здесь на случай, если я смогу кого-нибудь избавить от хлопот.
Если вы используете средство запуска кода, посмотрите в настройках пользователя и установите:
"code-runner.executorMap" : { "cpp" : "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" }
Соответствующий бит - "g ++ -std = C++ 17".
Это, конечно, означает, что вы можете скомпилировать свою программу в оболочке, используя решение Дэниела выше, но не в VScode + и используя средство запуска кода.
В VS Code:
Файл >> Настройки >> Настройки >> Расширения
найдите C_Cpp> По умолчанию: раскрывающееся меню Cpp Standard
установите это на С ++ 11

Но это не решает мою проблему. Он по-прежнему показывает то же предупреждение
Я использовал это, чтобы решить свою проблему. Откройте свой терминал
трепать
echo "alias g++='g++ -std=c++17'" >> ~/.bashrc
source ~/.bashrc
zsh
echo "alias g++='g++ -std=c++17'" >> ~/.zshrc
source ~/.zshrc
Вы компилируете для C++ 11? Не похоже на это. Ключевое слово
autoбыло введено в C++ 11, поэтому до этого оно считалось расширением языка Visual Studio.