Visual Studio代码c++11扩展警告

r3i60tvu  于 2023-02-01  发布在  其他
关注(0)|答案(9)|浏览(151)

我正在学习c++,我使用的是Mac版的Visual Studio代码,我使用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_属性. 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
}
hgtggwj0

hgtggwj01#

VS代码:
文件〉〉首选项〉〉设置〉〉扩展名
查找C_Cpp〉默认:Cpp标准下拉菜单
设置为c++11

yeotifhr

yeotifhr2#

我花了这么长时间今天试图找出为什么我得到这个错误,没有在哪里有我需要的确切答案,所以我想我会张贴在这里,以防万一我可以保存任何人的麻烦。
如果您使用的是code runner,请查看用户设置并设置:

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

相关位是“g++ -标准品=c++17”。
这当然是假设你可以使用丹尼尔的解决方案在shell中编译你的程序,而不是在VScode +中和使用code runner。

wz8daaqr

wz8daaqr3#

我遇到了同样的问题,但使用set vscode-user-settings〈〉解决了这个问题

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

bfhwhh0e

bfhwhh0e4#

我用这个解决了我的问题。打开你的终端
猛击

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

日什

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

ijxebb2r5#

对于每个来问这个问题的人来说,找到一个快速的答案(就像我一样):
下面的编译器命令应该用最新的C标准(c17)编译你的程序main.cpp,并且应该去掉上面描述的警告消息:
g++ -std=c++17 -g main.cpp -o main
评论中多次提到,但我认为这个问题应该有一个规律的答案。

piah890a

piah890a6#

如果您在VS中使用CPH judge扩展,请在Cph › Language › Cpp中添加-std=c++11:扩展设置中的参数

qvk1mo1f

qvk1mo1f7#

如果您使用的是CPH,请将此行添加到Cph〉〉Language〉〉Cpp:参数

-std=c++17

如果它对您不起作用,也可以转到文件〉〉首选项〉〉设置〉〉扩展〉〉C_Cpp〉〉Default:Cpp_Standard并将其设置为c++17

kxe2p93d

kxe2p93d8#

这里没有一个答案对我在Mac上完全在VSCode中工作(我不想修改我的.zshrc文件)。
不过,* 确实 * 起作用的是在Extensions > clangd下为clangd: Fallback Flags添加参数--std=c++20,然后重新启动VSCode。

ugmeyewa

ugmeyewa9#

修复MAC +代码运行程序。
1.选择代码-〉设置-〉设置
1.在搜索提示中,搜索“代码运行者”:

1.点击“编辑设置. json”
1.查找名为“代码运行者.执行Map”的字段-〉“cpp”
1.在g之后,添加以下内容“-std=c17“。换句话说,该行应如下所示:
“cpp”:“cd $目录&& g++ -std=c++17 $文件名-o $文件名不带扩展名&& $目录$文件名不带扩展名”
1.关闭VSCode,然后再次打开它。

相关问题