C ++变量在push_back之后未传递其值

时间:2018-12-04 21:49:20

标签: c++ variables g++ push-back

我遇到一个奇怪的问题,即我声明要推回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 :(得分:2)

  

警告:扩展的初始化程序列表仅适用于-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);
    

答案 1 :(得分:1)

按照警告提示进行操作,并将-std=c++11-std=gnu++11添加到编译器选项中。

直到C ++ 11才将语法Lignetemp.push_back({Rtemp,Vtemp,Btemp});添加到该语言中。