我遇到一个奇怪的问题,即我声明要推回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
您有关于修复的想法吗? 谢谢:)
答案 0 :(得分:2)
警告:扩展的初始化程序列表仅适用于-std = c ++ 11或-std = gnu ++ 11
警告为您提供了线索。
您将初始化列表传递给push_back
方法。
就这个:
{Rtemp,Vtemp,Btemp}
您可以:
将警告中提到的标志传递给编译器。如何传递它-取决于您的构建系统是什么。
使用显式实例化:
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});
添加到该语言中。