Я новичок в C ++, прорабатываю свой первый учебник, и когда я пытаюсь скомпилировать код из урока, я получаю следующую ошибку:
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;
}
Я использую Visual Studio Code (v.1.46.1) на Macbook Pro с расширением 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
Первоначально я запустил Terminal> Configure Default Build Task в 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 ++», установленный на C ++ 17 (похоже, дефолт). Даже в этом случае выполнение компиляции из командной строки без установленного флага
-std=c++17
вызывает ту же ошибку компилятора. - Попытка изменить
int x{ };
на следующее: int x( );
: сбой с очень длинным списком ошибок int x(0);
: успешно компилируется int x = { };
: успешно компилируется int x = {0};
: успешно компилируется - `int x; ': успешно компилируется
- `int x = 0; ': успешно компилируется