Visual Studio Code C++11扩展警告

19

我正在学习C++,并且在Mac上使用Visual Studio Code。我使用Code Runner运行程序。我的问题是当我使用c++11中的“auto”进行变量声明时,Visual Studio Code会给出警告,但如果我尝试在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_properties.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
4
你能否从命令行编译它?也就是打开一个shell,进入那个目录,然后输入 g++ -std=c++17 -g helloworld.cpp -o helloworld:它能工作吗? - Fabio says Reinstate Monica
@Bob__ 我已经安装了 Xcode,应该已经安装了 clang,但我尝试将命令更改为 clang,但没有任何变化。 - BONANDRINI CARLO
错误:没有这个文件或目录 你在执行时所在的文件夹不正确。你的shell必须与helloworld.cpp在同一个文件夹中。 - drescherjm
2
很高兴你解决了问题,但请不要编辑帖子标题添加“已解决”,因为Stack Overflow的工作方式不同。正确的方法是在有答案时接受它。你可以问一下@Bob__是否有兴趣发布一个答案;如果他没有,请自己发布并接受它。谢谢! - Fabio says Reinstate Monica
显示剩余10条评论
11个回答

26

在VS Code中:

文件>>首选项>>设置>>扩展

找到 C_Cpp > 默认:Cpp 标准 下拉菜单

将其设置为 c++11

选项窗口图像


9
但这并没有解决我的问题。它仍然显示相同的警告。 - Alex
2
在 macOS 上,这是 Code > Preferences > Settings > Extensions。 - tedtanner
问题已解决 - 只需要重新启动 VS Code,问题就迎刃而解了。 - jonah butler
2
关闭并重新打开VSCode。 - starboy_jb
你应该明确指出这是一个Windows修复程序,你的回答让我感到沮丧,因为我是Mac用户,而且界面也不同。 - Dennis Kozevnikoff

18

今天我花了很长时间试图找出为什么会出现这个错误,但是没有地方给出我需要的确切答案,所以我想在这里发布一下,以防我能够帮助任何人避免麻烦。

如果你正在使用Code Runner,请查看用户设置并进行以下设置:

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

关键点在于 "g++ -std=c++17"。

当然,前提是您可以使用Daniel上面的解决方案在shell中编译您的程序,但不能在VScode+和使用代码运行器中编译。


1
这是我使用Code runner的唯一可行解决方案。 - Bedo
1
这是对我有效的方法。我使用的是MAC -> VS Code + Code Runner。 - NeonGlow
对于那些想要这样做的人:要找到文件,请进入扩展(对我来说,它在左侧边栏上)。点击齿轮图标按钮,点击扩展设置。搜索code-runner,向下滚动找到一个名为"code-runner: executorMap"的部分,点击编辑settings.json。然后找到CPP部分并添加"-std=c++17"。 - undefined

13

我遇到了相同的问题,但是使用 set vscode-user-settings 命令解决了它 <>

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

vscode-用户设置


7
你在哪里找到这个文件? - Ridhuvarshan

9

对于所有来到这里寻找快速答案的人(就像我一样):

以下编译器命令应该使用最新的C++标准(c++17)编译您的程序main.cpp,并且应该消除上面描述的警告信息:

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

虽然在评论中多次提到了这个问题,但我认为这个问题应该有一个正式的答案。


这应该是 Mac 的正确答案。 - jdog
1
我应该在哪里运行这段代码?终端不起作用。 - CN_Cabbage

8
我用这个方法解决了我的问题。打开你的终端。
输入命令:bash
echo "alias g++='g++ -std=c++17'" >> ~/.bashrc
source ~/.bashrc

zsh

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

似乎在nvim中无法工作? - MrZ

5

MAC + 代码运行器的修复。

  1. 选择“代码” -> “设置” -> “设置”

  2. 在搜索提示中,搜索“code-runner”:

enter image description here

  1. 点击“编辑settings.json”

  2. 查找名为“code-runner.executorMap”的字段 -> “cpp”

  3. 在g++后面添加以下内容“-std=c++17”。换句话说,该行应该类似于:

    "cpp": "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"

  4. 关闭VSCode,然后重新打开。


1

这里的所有答案都不能在我的Mac上完全在VSCode内部工作(我不想修改我的.zshrc文件)。

然而,确实有效的方法是在Extensions > clangd下为clangd: Fallback Flags添加参数--std=c++20,然后重新启动VSCode。

enter image description here


1
如果您在VS中使用CPH Judge扩展,则需要在扩展设置的Cph › Language › Cpp: Args中添加-std=c++11

0
如果您正在使用CPH,请将此行添加到Cph >> Language >> Cpp: Args中。
-std=c++17

如果这个方法对你不起作用,也可以前往文件 >> 首选项 >> 设置 >> 扩展 >> C_Cpp >> Default:Cpp_Standard,将其设置为c++17。

为什么不直接编辑SHASHANK BHARDWAJ的答案?这几乎是一个重复的回答。 - starball

0

我通过运行VSCode clangd扩展的"Download language server"命令成功解决了问题。

通过Ctrl/Cmd + Shift + P打开命令面板,然后搜索"clangd: Download language server"并运行该命令。然后重新启动VSCode。警告应该会消失。

你也可以尝试"clangd: Check for language server update"

这是命令:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接