C++ 14 и код Visual Studio

У меня проблема с инициализацией вектора.

Когда я пытаюсь запустить этот код:

#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, но все равно не работает.

Как я могу это исправить??

Этот вопрос и связанные с ним ответы должны помочь. Этот ответ, в частности, показывает аналогичную инициализацию вектора, подразумевая, что вашей проблемой является отсутствующий = (например, измените свой код на vector<int> a = {5, 5, 5} ; )
David Makogon 01.05.2018 14:31

Невозможно воспроизвести компиляцию C++ 11 или C++ 14 с помощью g ++ или clang ++. Вы видите точную команду компиляции, которая вызывает ошибку? Вы уверены, что компилируете C++ 11 или C++ 14?

max66 01.05.2018 14:40

Ваш файл tasks.json относится к другому файлу ("vectoroutofbounds2.cpp"), чем ваше сообщение об ошибке ("tempCodeRunnerFile.cpp") - также добавьте вывод терминала выполнения задачи (должен начинаться с «Выполнение задачи:»)

UnholySheep 01.05.2018 14:56

@DavidMakogon, вы ошибаетесь, код OP полностью действителен (см. Здесь: ideone.com/Hr7nc7), нет отсутствующего =. Прямая инициализация списка - это функция C++ 11, что означает, что компилятор не компилируется с включенными этими функциями (именно об этом и идет речь)

UnholySheep 01.05.2018 15:02

@UnholySheep Имя файла - vectoroutofbounds2.cpp, поэтому я также не понимаю, почему tempCodeRunnerFile.cpp появляется как ошибка. Что касается последней части, как я могу это сделать?

Lydia 01.05.2018 15:51

Над сообщением об ошибке должно быть больше текста - где-то в начале должна быть фактическая команда, которая была выполнена задачей (на моей машине это выглядит как > Выполнение задачи: clang ++ -g test.cpp < - здесь важна часть после «Выполнение задачи»)

UnholySheep 01.05.2018 15:57

@UnholySheepcd Теперь я получаю: "/ Users / ~ /" && g ++ vectoroutofbounds2.cpp -o vectoroutofbounds2 && "/ Users / ~" vectoroutofbounds2 vectoroutofbounds2.cpp: 8: 18: error: expected ';' в конце объявления vector <int> a {5, 5, 5}; ^; Произошла 1 ошибка.

Lydia 01.05.2018 17:55

Что ж, эта команда полностью отличается от той, что у вас есть в вашем файле tasks.json - вы абсолютно уверены, что та, которую вы разместили, является правильной (и у вас нет другой в папке .vscode)? Если да, я бы предложил попробовать удалить файл задач и создать его снова.

UnholySheep 01.05.2018 18:12

@UnholySheep Да, есть только один файл tasks.json, который я напечатал выше. Я думаю, что раньше я писал это, включая что-то вроде «-Wall», «&&» и прочее, но сейчас это точно так же, как то, что я опубликовал. Это сводит меня с ума.

Lydia 01.05.2018 18:19

К сожалению, я не могу воспроизвести вашу проблему. Удаление файла tasks.json и его повторное создание (через VS Code) - единственное, что я мог придумать, что еще могло бы работать. Что-то определенно странное, но я не думаю, что это можно диагностировать удаленно, так как это происходит только на вашем ПК

UnholySheep 01.05.2018 18:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
10
1 179
1

Ответы 1

Я никогда раньше не видел, чтобы std :: vector инициализировался таким образом, обычно я делал что-то вроде std::vector<int> a = std::vector<int>({5, 5, 5});.

Обновлено: вы даже можете сделать std::vector<int> a = {5, 5, 5};.

Вы никогда не видели, только ты никогда не видели. direct-list-initialize отличается от ваших двух кодов, особенно от первого кода, который вы использовали для копирования вектора. Это причина, по которой я проголосовал против.

John Ding 13.05.2018 03:39

Другие вопросы по теме