来自另一个类C ++

时间:2018-05-24 11:16:50

标签: c++

我正在尝试在类中创建一个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类的构造函数中。我相信它可以使用矢量完成,但我不得不使用数组。

2 个答案:

答案 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;
    }
}