vector< string>msg {}未在Mac上的VS代码中为C++构建

c3frrgcw  于 2023-02-10  发布在  Mac
关注(0)|答案(1)|浏览(108)

我正在尝试在Mac(Intel)上配置VS代码以使用C++进行开发。我正在按照VS代码网站上的设置进行操作。按照所有步骤操作后,当我到达终端-运行构建任务时,构建失败并指示它预期出现“;“。我可以在XCode中运行相同的文件,没有任何问题,但VS代码失败。以下是VS代码安装站点中的完整代码。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}
ggazkfy8

ggazkfy81#

我也有同样的问题/错误信息与相同的源代码使用我的mac工作室与m1的基础上苹果arm64硅。
首先,源代码来自教程:Using Clang in Visual Studio Code.
当我运行代码时,我得到vector<string> msg的错误:

expected ';' at end of declaration 
range-based for loop is a C++11 extension [-Wc++11-extensions]

其次,正如@Harry在针对这个问题的评论中提到的:
从c++11开始支持使用初始化列表初始化std::vector。
解决方案:为tasks.json添加一个支持vector<string> msg的编译器版本。对我来说,我使用-std=c++17到"args"列表来解决这个问题。作为参考,我验证了-std=c++11也解决了这个问题。即使是2023标准的-std=c++2b也可以与Xcode版本14.2命令行扩展一起工作。
因此,在www.example.com的教程中为我创建的默认tasks.json文件缺少对编译器版本指令的任何引用。code.visualstudio.com was missing any reference to a compiler version directive.
下面是我更新后的tasks.json文件,在args列表中添加了一个新元素:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: clang++ build active file",
            "command": "/usr/bin/clang++",
            "args": [
                "-fcolor-diagnostics",
                "-fansi-escape-codes",
                "-std=c++17",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

相关问题