无法创建二维数组

时间:2014-09-05 18:53:53

标签: c++ vector

我试图按照我在本指南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);
    }
}

如何解决此错误?

3 个答案:

答案 0 :(得分:0)

您的代码中有几处错误:

  1. 您在

    行中使用vector而不是Vector
     auto squares= new Vector<Square*>;
    
  2. 您正在

    中添加指针而不是对象
     gameTable.push_back(squares);
    
  3. 您可以替换以下行:

     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::VectorgameTable的元素类型为std::vector<Square*>,与您传入的类型不兼容。将类型签名更改为:

std::vector<Vector<Square*>> gameTable;

您还应该考虑使用std::unique_ptremplace_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);
    }
}