我试图按照我在本指南http://www.cplusplus.com/forum/general/107678/中找到的方式创建一个二维数组。
但我收到了这个错误:
Error 1
error C2664: 'void std::vector<std::vector<Square *,std::allocator<_Ty>>,std::allocator<std::vector<_Ty,std::allocator<_Ty>>>>::push_back(const std::vector<_Ty,std::allocator<_Ty>> &)' :
cannot convert argument 1 from 'cocos2d::Vector<Square *> *' to 'std::vector<Square *,std::allocator<_Ty>> &&' f:\hoctap\technology\cocos2d-x\cocos2d-x-3.2\tools\cocos2d-console\bin\lightpuzzel\classes\sprites\table.cpp 63 1 LightPuzzel
这是我的代码:
vector<vector<Square*>> gameTable;
for (int i = 0; i < width; i++){
auto squares= new Vector<Square*>;
gameTable.push_back(squares);
for (int j = 0; j < height; j++){
auto *_square = new Square();
gameTable[i].push_back(_square);
}
}
如何解决此错误?
答案 0 :(得分:0)
您的代码中有几处错误:
您在
行中使用vector
而不是Vector
auto squares= new Vector<Square*>;
您正在
中添加指针而不是对象 gameTable.push_back(squares);
您可以替换以下行:
auto squares= new Vector<Square*>;
gameTable.push_back(squares);
只有一行:
gameTable.push_back(vector<Square*>());
处理这两个错误。
答案 1 :(得分:0)
要创建二维数组,您可以利用fill constructor。
vector<vector<Square*> > gameTable (rowSize, vector<Square*>(columnSize, NULL));
然后您可以使用嵌套循环填充2d数组。
for (int i=0; i<rowSize; i++) {
for (int j=0; j<columnSize; j++) {
gameTable[i][j] = xxx;
}
}
答案 2 :(得分:0)
您push_back()
std::vector<>
而不是cocos2d::Vector
。 gameTable
的元素类型为std::vector<Square*>
,与您传入的类型不兼容。将类型签名更改为:
std::vector<Vector<Square*>> gameTable;
您还应该考虑使用std::unique_ptr
和emplace_back()
这些元素:
std::vector<Vector<std::unique_ptr<Square>>> gameTable;
for (int i = 0; i < width; i++)
{
gameTable.emplace_back();
for (int j = 0; j < height; j++)
{
gameTable.at(i).push_back(new Square);
}
}