web-dev-qa-db-ja.com

Visual Studio Code c ++ 11拡張機能の警告

私はc ++を学習している最中で、Mac用のビジュアルスタジオコードを使用しています。コードランナーを使用してプログラムを実行しています。私の問題は、変数宣言に「auto」などのc ++ 11から何かを使用すると、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
}
9

同じ問題がありましたが、set vscode-user-settings <>を使用して解決しました

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

vscode- user setting

5
vic.zhang

VSコード:

ファイル>>設定>>設定>>拡張

c_Cpp> Default:Cpp Standardドロップダウンメニューを検索します

それをc ++ 11に設定します

Image of Option Window

4
iamczar

今日、このエラーが発生した理由を理解するために長い時間を費やしましたが、正確な答えがどこにあるのかわからなかったので、面倒を省くことができるように、ここに投稿することにしました。

コードランナーを使用している場合は、ユーザー設定を確認して設定します。

 "code-runner.executorMap" : { "cpp" : "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" }

関連するビットは「g ++ -std = c ++ 17」です。

これはもちろん、上記のダニエルのソリューションを使用してシェルでプログラムをコンパイルできますが、VScode +でコードランナーを使用してコンパイルすることはできません。

3
ljelliot

(私がしたように)この質問に答えて簡単な答えを見つける人は誰でも:

次のコンパイラコマンドは、プログラムをコンパイルする必要がありますmain.cpp最新のC++標準(c ++ 17)を使用し、上記のような警告メッセージを取り除く必要があります。

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

コメントで何度も言及されていますが、この質問には定期的に回答する必要があると思います。

1
Daniel Schütte