我正在尝试在类中创建一个2D对象数组,然后使用另一个类的构造函数初始化每个单元格,但我收到错误并且不知道如何解决它。以下是课程:
瓷砖:
class Tile
{
public:
enum Type
{
Sea, Ship, Hit, Miss
};
Tile() {}
Tile (int X, int Y, Type c)
{
this->X = X;
this->Y = Y;
this->cell = cell;
}
void setType(Type c)
{
this->cell = c;
}
Type getType()
{
return cell;
}
void draw(bool hidden)
{
if (hidden == false)
switch (this->getType())
{
case Sea:
cout<<" ~ ";
break;
case Ship:
cout<<" s ";
break;
case Hit:
cout<<" X ";
break;
case Miss:
cout<<" o ";
break;
}
else
switch (this->getType())
{
case Hit:
cout<<" X ";
break;
case Miss:
cout<<" o ";
break;
default:
cout<<" ~ ";
break;
}
}
private:
Type cell;
int X,Y;
};
班主席:
class Board
{
private:
Tile B[row][col];
int R, C;
public:
Board (Tile B[][col])
{
for (R = 0; R < row; R++)
for (C = 0; C < col; C++)
B[R][C] = new Tile(R, C, Tile::Sea);
}
};
我得到的错误是在Board类的构造函数中。我相信它可以使用矢量完成,但我不得不使用数组。
答案 0 :(得分:2)
这里的错误是new Tile(R, C, Tile::Sea)
返回指针而不是实例本身:
//B[R][C] = new Tile(R, C, Tile::Sea);
Tile * tile = new Tile(R, C, Tile::Sea);
B[R][C] = *tile;
当然,你可以像@CoryKramer一样简单地做到这一点:
B[R][C] = Tile(R, C, Tile::Sea);
答案 1 :(得分:0)
不是一个真正的答案(可能是上面给出的),但是一些观察评论形式太狭隘而无法包含。
予。 Tile
'构造函数应该真正读取
Tile(Int x, int y, Tile c): X(x), Y(y), cell(c) {}
II。而draw
只需要一个switch
:
void draw(bool hidden) {
switch(type) {
case Hit:
cout<<" X ";
break;
case Miss:
cout<<" o ";
break;
case Ship:
if(!hidden) {
cout<<" s ";
break;
}
case Sea:
cout<<" ~ ";
break;
}
}