我试图创建一个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];
}