我如何创建一个2d数组指针与我自己的类作为类型



我试图创建一个2d数组指针与我自己的类,Tile,作为类型。我已经看了代码的例子,我如何声明一个2d数组在c++中使用new?下面的代码可以很好地工作:

int** ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
    ary[i] = new int[sizeY];
for(int i = 0; i < 8; i++)
    for(int j = 0; j < 8; j++)
        ary[i][j] = 5;
for(int i = 0; i < 8; i++)
    for(int j = 0; j < 8; j++)
        cout << ary[i][j];

然而,当我试图将类型从int更改为我自己的类Tile时,我得到一个

没有可行的重载'='

错误在XCode,我不知道这是什么意思。我使用以下代码:

Tile** t;
t = new Tile*[8];
for(int i = 0; i < 8; ++i)
    t[i] = new Tile[8];
for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 8; j++) {
        t[i][j] = new Tile(new NoPiece());
    }
}
for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 8; j++) {
        cout << (t[i][j].get_piece()).to_string();
    }
}
下面是Tile.cpp的代码:
#include "Tile.h"
Tile::Tile() {
}
Tile::Tile(Piece p) {
    piece = &p;
}
Piece Tile::get_piece() {
    return *piece;
}

和Tile.h:

的代码
#include <iostream>
#include "Piece.h"
class Tile {
    Piece * piece;
public:
    Tile();
    Tile(Piece p);
    Piece get_piece();
};

两个代码片段的区别在于使用int的代码片段将数组元素视为值,即赋值

ary[i][j] = 5;

而使用Tile的则将数组元素视为指针:

t[i][j] = new Tile(new NoPiece()); // new makes a pointer to Tile

将赋值更改为没有new的1来解决问题:

t[i][j] = Tile(new NoPiece());

创建一个2D指针数组也没有错——你所需要做的就是将它声明为一个"三重指针",并增加一个额外的间接层次:

Tile*** t;
t = new Tile**[8];
for(int i = 0; i < 8; ++i)
    t[i] = new Tile*[8];
for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 8; j++) {
        t[i][j] = new Tile(new NoPiece());
    }
}
for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 8; j++) {
        cout << (t[i][j]->get_piece()).to_string();
    }
}
// Don't forget to free the tiles and the array
for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 8; j++) {
        delete t[i][j];
    }
    delete[] t[i];
}

相关内容

  • 没有找到相关文章