Переменная C ++ не передает свое значение после push_back - PullRequest
0 голосов
/ 05 декабря 2018

У меня странная проблема, из-за которой я объявляю переменные, которые возвращаются к vector<vector<pixel>>, фактически не возвращаются ... Посмотрите:

vector<pixel> Lignetemp;
for(int j = 0; j < InfoSup.nbL; j++){
    Lignetemp.clear();
    for(int i = 0; i < InfoSup.nbC; i++){
        int Rtemp, Vtemp, Btemp;
        cin >> Rtemp;
        cin >> Vtemp;
        cin >> Btemp;
        Lignetemp.push_back({Rtemp,Vtemp,Btemp});
    }
    Data.push_back(Lignetemp);
}

Пиксельопределяется следующим образом:

struct pixel{
    int R, V, B; 
};

Проблема в том, что когда я пытаюсь распечатать данные, я получаю только 0 вместо значений, которые я cin Кроме того, я кодирую как в Windows, так и в Linux (компиляторы g ++ разных версий), а именно в Ubuntu компилятор выдает мне такие предупреждения:

предупреждение: расширенные списки инициализаторов доступны только с -std = c ++ 11 или -std = gnu ++11

У вас есть идея по поводу исправления?Спасибо:)

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Сделайте, как подсказывает предупреждение, и добавьте -std=c++11 или -std=gnu++11 в параметры компилятора.

Синтаксис Lignetemp.push_back({Rtemp,Vtemp,Btemp}); не был добавлен в язык до C ++ 11.

0 голосов
/ 05 декабря 2018

предупреждение: расширенные списки инициализатора доступны только с -std = c ++ 11 или -std = gnu ++ 11

Предупреждение дает подсказку.

Вы передаете список инициализатора методу push_back.Вот оно: {Rtemp,Vtemp,Btemp}

Вы можете либо:

  1. Передать флаг, упомянутый в предупреждении, вашему компилятору.Как его передать - зависит от того, какая у вас система сборки.

  2. Использовать явное создание экземпляра:

    pixel p;
    cin >> p.R >> p.V >> p.B;
    Lignetemp.push_back(p);
    
...