gpt4 book ai didi

使用直接大括号初始化时c++编译错误 'expected ' ;' at end of declaration'

转载 作者:行者123 更新时间:2023-12-01 13:47:55 26 4
gpt4 key购买 nike

我对 C++ 非常陌生,正在学习我的第一个教程,当我尝试编译类(class)中的代码时,出现以下错误:

expected ';' at end of declaration
int x{ }; // define variable x to hold user input (a...
^
;
我试图运行的程序的完整代码:
#include <iostream>  // for std::cout and std::cin

int main()
{
std::cout << "Enter a number: ";
int x{ };
std::cin >> x;
std::cout << "You entered " << x << '\n';
return 0;
}
我在 Macbook Pro 上使用 Visual Studio Code (v.1.46.1),带有 Microsoft C/C++ 扩展 ( https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools )。
我的编译器是 Clang:
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
最初,我在 VS Code 中运行终端 > 配置默认构建任务来创建一个 .vscode/tasks.json 编译器设置文件。该文件目前看起来像这样:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: clang++ build active file",
"command": "/usr/bin/clang++",
"args": [
// Set C++ Standards
"-std=c++17",

// Increase compiler warnings to maximum
"-Wall",
"-Weffc++",
"-Wextra",
"-Wsign-conversion",

// Treat all warnings as errors
"-Werror",

// Disable compiler extensions
"-pedantic-errors",

// File to compile
"-g",
"${file}",

// Output file
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
我有 -std=c++17标志集,根据我的理解,它应该允许直接初始化大括号。
我不确定这是否重要,因为我正在尝试编译而不是构建/调试,但为了彻底起见,我还有一个 .vscode/launch.json 文件,其中包含以下内容:
{
"version": "0.2.0",
"configurations": [
{
"name": "clang++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "C/C++: clang++ build active file"
}
]
}
有人能帮我弄清楚为什么 int x{ };无法正常初始化变量,我可以做些什么来修复它才能正常工作?
[编辑]:我检查/测试的其他设置:
  • 使用 clang++ -std=c++17 -g helloworld.cpp -o helloworld 直接从命令行运行编译时,代码编译正确
  • VS Code C/C++ 扩展配置将“C++ 标准”设置为 c++17(似乎是默认设置)。即便如此,在没有 -std=c++17 的情况下运行命令行编译标志集会导致相同的编译器错误。
  • 尝试更改 int x{ };到以下几点:
  • int x( ); : 失败,错误列表很长
  • int x(0); : 编译成功
  • int x = { }; : 编译成功
  • int x = {0}; : 编译成功
  • `int x;':编译成功
  • `int x = 0;': 编译成功

  • 最佳答案

    引用this explanation of List initialization , 从 c++11 开始,这种语法应该是合法的:

    int main()
    {
    int n0{}; // value-initialization (to zero)
    int n1{1}; // direct-list-initialization
    //...
    }
    我尝试在本地环境中编译您的代码,一切正常:
    clang++ -std=c++17 -Wall -Weffc++ -Wextra -Wsign-conversion -Werror -pedantic-errors ...

    clang++ --version
    clang version 9.0.1
    Target: x86_64-pc-linux-gnu
    Thread model: posix
    也许你使用了一些类似的 ';'不是 ASCII 的字符?
    我尝试使用汉字 ';' 代替并得到这个:
    fly.cc:32:13: error: treating Unicode character <U+FF1B> as identifier character rather than as ';' symbol [-Werror,-Wunicode-homoglyph]
    int x{ };
    ^~
    fly.cc:32:13: error: expected ';' at end of declaration
    int x{ };
    ^
    ;

    关于使用直接大括号初始化时c++编译错误 'expected ' ;' at end of declaration',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62487546/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com