首页 > 解决方案 > 从另一个类 C++ 的构造函数初始化二维数组

问题描述

我正在尝试在一个类中创建一个二维对象数组,然后使用另一个类的构造函数初始化每个单元格,但是我遇到了一个错误并且不知道如何修复它。以下是课程:

瓦:

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 类的构造函数中。我相信可以使用向量来完成,但我不得不使用数组。

标签: c++

解决方案


这里的错误是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);

推荐阅读