У меня проблема с инициализацией вектора.
Когда я пытаюсь запустить этот код:
#include <iostream>
#include <vector>
using namespace std;
int main() {
const int SIZE = 3;
vector<int> a{5, 5, 5} ;
cout << "a contains ";
for (int i = 0; i < SIZE; i++)
cout << a.at(i) << ' ';
cout << '\n';
for (int i = 0; i < SIZE; i++)
a.at(i) = 8;
cout << "a contains ";
for (int i = 0; i < SIZE; i++)
cout << a.at(i) << ' ';
cout << '\n';
}
Я все время получаю эту ошибку:
tempCodeRunnerFile.cpp:8:18: error: expected ';' at end of declaration
vector<int> a{5, 5, 5} ;
^
;
1 error generated.
Я пытаюсь понять, запустить С ++ 11 или С ++ 14, но сейчас я потерялся.
Мой файл c_cpp_properties.json:
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}",
"/usr/include/c++/4.2.1",
"/usr/include/c++/4.2.1/tr1"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"macFrameworkPath": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Win32",
"includePath": [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include",
"${workspaceRoot}"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 3
}
Мой файл tasks.json:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "g++",
"args": [
"-o", "test", "-std=c++14", "vectoroutofbounds2.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
Я пытался решить эту проблему, используя способы из github, решение1 и решение2, но все равно не работает.
Как я могу это исправить??
Невозможно воспроизвести компиляцию C++ 11 или C++ 14 с помощью g ++ или clang ++. Вы видите точную команду компиляции, которая вызывает ошибку? Вы уверены, что компилируете C++ 11 или C++ 14?
Ваш файл tasks.json
относится к другому файлу ("vectoroutofbounds2.cpp"
), чем ваше сообщение об ошибке ("tempCodeRunnerFile.cpp"
) - также добавьте вывод терминала выполнения задачи (должен начинаться с «Выполнение задачи:»)
@DavidMakogon, вы ошибаетесь, код OP полностью действителен (см. Здесь: ideone.com/Hr7nc7), нет отсутствующего =
. Прямая инициализация списка - это функция C++ 11, что означает, что компилятор не компилируется с включенными этими функциями (именно об этом и идет речь)
@UnholySheep Имя файла - vectoroutofbounds2.cpp, поэтому я также не понимаю, почему tempCodeRunnerFile.cpp появляется как ошибка. Что касается последней части, как я могу это сделать?
Над сообщением об ошибке должно быть больше текста - где-то в начале должна быть фактическая команда, которая была выполнена задачей (на моей машине это выглядит как > Выполнение задачи: clang ++ -g test.cpp < - здесь важна часть после «Выполнение задачи»)
@UnholySheepcd Теперь я получаю: "/ Users / ~ /" && g ++ vectoroutofbounds2.cpp -o vectoroutofbounds2 && "/ Users / ~" vectoroutofbounds2 vectoroutofbounds2.cpp: 8: 18: error: expected ';' в конце объявления vector <int> a {5, 5, 5}; ^; Произошла 1 ошибка.
Что ж, эта команда полностью отличается от той, что у вас есть в вашем файле tasks.json
- вы абсолютно уверены, что та, которую вы разместили, является правильной (и у вас нет другой в папке .vscode
)? Если да, я бы предложил попробовать удалить файл задач и создать его снова.
@UnholySheep Да, есть только один файл tasks.json, который я напечатал выше. Я думаю, что раньше я писал это, включая что-то вроде «-Wall», «&&» и прочее, но сейчас это точно так же, как то, что я опубликовал. Это сводит меня с ума.
К сожалению, я не могу воспроизвести вашу проблему. Удаление файла tasks.json
и его повторное создание (через VS Code) - единственное, что я мог придумать, что еще могло бы работать. Что-то определенно странное, но я не думаю, что это можно диагностировать удаленно, так как это происходит только на вашем ПК
Я никогда раньше не видел, чтобы std :: vector инициализировался таким образом, обычно я делал что-то вроде std::vector<int> a = std::vector<int>({5, 5, 5});
.
Обновлено: вы даже можете сделать std::vector<int> a = {5, 5, 5};
.
Вы никогда не видели, только ты никогда не видели. direct-list-initialize отличается от ваших двух кодов, особенно от первого кода, который вы использовали для копирования вектора. Это причина, по которой я проголосовал против.
=
(например, измените свой код наvector<int> a = {5, 5, 5} ;
)