Предупреждение о расширении Visual Studio Code C++ 11

Я изучаю 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
}

Вы компилируете для C++ 11? Не похоже на это. Ключевое слово auto было введено в C++ 11, поэтому до этого оно считалось расширением языка Visual Studio.

Cory Kramer 26.06.2018 17:46

@CoryKramer Вопрос касается VS Code, а не VS.

user2100815 26.06.2018 17:47

Вы говорите компилятору использовать 2 разных стандарта: у вас есть «-std = C++ 17» и «-std = C++ 11».

Fabio says Reinstate Monica 26.06.2018 17:47

@FabioTurati Я пробовал использовать только один, но он все равно не сработал

BONANDRINI CARLO 26.06.2018 18:01

Можете ли вы скомпилировать его из командной строки? То есть откройте оболочку, перейдите в этот каталог и введите g++ -std=c++17 -g helloworld.cpp -o helloworld: это работает?

Fabio says Reinstate Monica 26.06.2018 18:14

@FabioTurati clang: ошибка: нет такого файла или каталога: 'helloworld.cpp' clang: error: нет входных файлов

BONANDRINI CARLO 26.06.2018 18:40

Ваш путь к компилятору - "/usr/bin/clang", но тогда в задаче у вас есть "command": "g++". Какой компилятор вы установили?

Bob__ 26.06.2018 18:51

@Bob__ я установил Xcode, который должен установить clang, но я попытался изменить команду на clang, но это ничего не меняет

BONANDRINI CARLO 26.06.2018 18:55
ошибка: нет такого файла или каталога Вы были не в той папке, когда выполнили это. Ваша оболочка должна находиться в той же папке, что и helloworld.cpp.
drescherjm 26.06.2018 18:56

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

BONANDRINI CARLO 26.06.2018 18:57

Это marketplace.visualstudio.com/…? Как выглядит его конфигурация?

Bob__ 26.06.2018 19:00

@Bob__ // вы имеете в виду это: установите исполнителя для каждого языка "cpp": "cd $ dir && g ++ $ fileName -o $ fileNameWithoutExt && $ dir $ fileNameWithoutExt"

BONANDRINI CARLO 26.06.2018 19:19

Что ж, ЕСЛИ вы используете это расширение для запуска программы (почему?), В командной строке после g++ (clang?) Добавьте -std=c++17.

Bob__ 26.06.2018 20:00

@Bob__ СПАСИБО, ЧТО НАКОНЕЦ РЕШЕНИЕ ПРОБЛЕМЫ

BONANDRINI CARLO 26.06.2018 20:27

Я рад, что вы смогли решить свою проблему, но, пожалуйста, не редактируйте свое сообщение, добавляя в заголовок «РЕШЕНО», Stack Overflow работает иначе. Правильный способ указать это - принять ответ, если он есть. Вы можете спросить @Bob__, заинтересован ли он в публикации такого письма; если нет, опубликуйте его сами и примите. Спасибо!

Fabio says Reinstate Monica 27.06.2018 00:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
15
16 835
5

Ответы 5

Для всех, кто приходит к этому вопросу, должен найти быстрый ответ (как это сделал я):

Следующая команда компилятора должна скомпилировать вашу программу main.cpp с последним стандартом C++ (C++ 17) и избавиться от предупреждающих сообщений, подобных описанному выше:

g++ -std=c++17 -g main.cpp -o main

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

У меня была такая же проблема, но я решил ее с помощью set vscode-user-settings <>

"clang.cxxflags": ["-std=c++14"]

vscode- user setting

Где ты нашел этот файл?

Ridhuvarshan 10.12.2020 07:00

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

Если вы используете средство запуска кода, посмотрите в настройках пользователя и установите:

 "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

Image of Option Window

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

Alex 22.01.2021 19:42

Я использовал это, чтобы решить свою проблему. Откройте свой терминал

трепать

echo "alias g++='g++ -std=c++17'" >> ~/.bashrc
source ~/.bashrc

zsh

echo "alias g++='g++ -std=c++17'" >> ~/.zshrc
source ~/.zshrc

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