首先,我对C ++很陌生,所以我可能不得不尝试使用伪代码和/或Python来解释我正在尝试做的事情......
我正在尝试为动画的每个帧存储X和Y坐标对,以用于多个精灵。我设想这类似于以下内容 - 假设PLAIN == 1(使用枚举):
animationFrames[PLAIN][0] = { 20, 50 }
animationFrames[PLAIN][1] = { 25, 55 }
等等。我本质上希望能够使用所讨论的精灵的ID查询animationFrames并接收一组X,Y坐标来迭代。我觉得这很棘手。这是我的尝试,但不起作用......
std::vector< std::vector< std::pair<int, int> > > frames = {
{
{ 1, 1 }, { 2, 2 } // two frames for sprite A
},
{
{ 3, 3 }, { 4, 4 } // two frames for sprite B
}
};
这会导致以下错误消息:
prog.cpp: In function 'int main()':
prog.cpp:15: error: braces around initializer for non-aggregate type 'std::vector<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >, std::allocator<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > > >'
我尝试了各种矢量,对和数组的突变,但我似乎无法弄明白。
提前致谢!
答案 0 :(得分:1)
我认为你的编译器可能无法处理C ++ 11标准,这意味着它不支持大括号初始化。您可以逐个添加项目:
std::vector<std::vector<std::pair<int, int> > > frames(2);
std::vector<std::pair<int, int> > &v1 = frames[0];
v1.push_back(std::pair<int, int>(1, 1));
v1.push_back(std::pair<int, int>(2, 2));
std::vector<std::pair<int, int> > &v2 = frames[1];
v2.push_back(std::pair<int, int>(3, 3));
v2.push_back(std::pair<int, int>(4, 4));
它更加丑陋,但应该有效。另一方面,如果你的编译器支持C ++ 11,你甚至不需要=
,你可以删除一些空格:
std::vector<std::vector<std::pair<int, int>>> frames {
{
{ 1, 1 }, { 2, 2 } // two frames for sprite A
},
{
{ 3, 3 }, { 4, 4 } // two frames for sprite B
}
};