如何使用初始化列表初始化地图
How do I initialize a map with initializer list
我遇到了地图初始化问题。
我想要一个 table 来访问我的俄罗斯方块的所有方向。
尝试了很多方法来初始化,但是好像太复杂了,没法初始化。
这次是错误信息:
错误C2440“初始化”:无法从“初始化列表”转换为“std::map,std::allocator<_Ty>>,std::allocator>>>,std::less<_Kty>, std::allocator>,std::allocator>>>>>>” WinApp c:\codes\learning\winapp\tetris.cpp 44
我想知道如何初始化这个table。
在我的
block
class:
typedef std::map<shapes, std::vector < std::vector<std::pair<int, int> > > > proj;
static proj dirs ;
.cpp 文件中:
block::proj block::dirs =
{
{ 6,{ { TL, TC, MR },{ TC, ML, BL } } },
{ 4,{ { TR, TC, ML },{ TC, MR, BR } } },
{ 5,{ { ML, MR, BC },{ TC, MR, BC },{ TC, ML, MR },{ TC, ML, BC } } },
{ 3,{ { TL, TC, ML } } },
{ 2,{ { { ML, BL, MR },{ TC, BC, BR },{ TR, ML, MR },{ TL, TC, BC } } } },
{ 1,{ { ML, BR, MR },{ TR, TC, BC },{ TR, TC, BC },{ TL, MR, ML },{ TC, BC, BL } } },
{ 0,{ { ML, MR,{ 2,0 },{ TC, BC,{ 0,2 } } } } } // sticks out
};
我将这些对定义为简称为 const vars。
const std::pair<int, int> TL{ -1,-1 }; /* top left */
const std::pair<int, int> TC{ 0,-1 }; /* top center */
const std::pair<int, int> TR{ 1,-1 }; /* top right */
const std::pair<int, int> ML{ -1,0 }; /* middle left */
const std::pair<int, int> MR{ 1,0 }; /* middle right */
const std::pair<int, int> BL{ -1,1 }; /* bottom left */
const std::pair<int, int> BC{ 0,1 }; /* bottom center */
const std::pair<int, int> BR{ 1,1 }; /* bottom right */
看起来 dirs
声明的最后一行中的大括号错位了。尝试替换
{ 0,{ { ML, MR,{ 2,0 },{ TC, BC,{ 0,2 } } } } }
和
{ 0,{ { ML, MR,{ 2,0 } },{ TC, BC,{ 0,2 } } } }
我遇到了地图初始化问题。 我想要一个 table 来访问我的俄罗斯方块的所有方向。 尝试了很多方法来初始化,但是好像太复杂了,没法初始化。
这次是错误信息:
错误C2440“初始化”:无法从“初始化列表”转换为“std::map,std::allocator<_Ty>>,std::allocator>>>,std::less<_Kty>, std::allocator>,std::allocator>>>>>>” WinApp c:\codes\learning\winapp\tetris.cpp 44
我想知道如何初始化这个table。
在我的
block
class:
typedef std::map<shapes, std::vector < std::vector<std::pair<int, int> > > > proj;
static proj dirs ;
.cpp 文件中:
block::proj block::dirs =
{
{ 6,{ { TL, TC, MR },{ TC, ML, BL } } },
{ 4,{ { TR, TC, ML },{ TC, MR, BR } } },
{ 5,{ { ML, MR, BC },{ TC, MR, BC },{ TC, ML, MR },{ TC, ML, BC } } },
{ 3,{ { TL, TC, ML } } },
{ 2,{ { { ML, BL, MR },{ TC, BC, BR },{ TR, ML, MR },{ TL, TC, BC } } } },
{ 1,{ { ML, BR, MR },{ TR, TC, BC },{ TR, TC, BC },{ TL, MR, ML },{ TC, BC, BL } } },
{ 0,{ { ML, MR,{ 2,0 },{ TC, BC,{ 0,2 } } } } } // sticks out
};
我将这些对定义为简称为 const vars。
const std::pair<int, int> TL{ -1,-1 }; /* top left */
const std::pair<int, int> TC{ 0,-1 }; /* top center */
const std::pair<int, int> TR{ 1,-1 }; /* top right */
const std::pair<int, int> ML{ -1,0 }; /* middle left */
const std::pair<int, int> MR{ 1,0 }; /* middle right */
const std::pair<int, int> BL{ -1,1 }; /* bottom left */
const std::pair<int, int> BC{ 0,1 }; /* bottom center */
const std::pair<int, int> BR{ 1,1 }; /* bottom right */
看起来 dirs
声明的最后一行中的大括号错位了。尝试替换
{ 0,{ { ML, MR,{ 2,0 },{ TC, BC,{ 0,2 } } } } }
和
{ 0,{ { ML, MR,{ 2,0 } },{ TC, BC,{ 0,2 } } } }