C++圆形结构

C++ Circular Struct

本文关键字:结构 C++      更新时间:2023-10-16

好的,所以本质上我在一块板上有一个片段的结构,如下所示:

struct piece
{
    int value;
    bool revealed;
    bool canMove(int x, int y)
    {
        //This is where the problem is.
        if (board[x][y].value == 13) //If it's not occupied
            return true;
        else
            return false;
    }
};
//Define the board
piece board[x][y];

它给了我一些错误,比如"板":未声明的标识符。我该怎么解决这个问题?我试着把board声明放在结构之前,但它只是说那部分是一个未声明的标识符。

我意识到我可以把板作为一个参数传递,但我有几个功能,这需要比我想要的更多的时间,所以如果有其他解决方案,请告诉我!

此问题与问题有关(但不相同)

您必须将类定义与其成员函数的实现解耦,以便编译器始终知道您在谈论什么:

struct piece
{
    int value;
    bool revealed;
    bool canMove(int x, int y);  // this is sufficient for the moment
};
piece board[x][y];   // now, compiler knows what a piece is. 
bool piece::canMove(int x, int y) 
{                    // now board is known as well
    if (board[x][y].value == 13) 
        return true;
    else
        return false;
}

在类内部声明canMove,然后在声明board之后在外部定义它。此时,您可以成功地参考board

您正在将一件一件地混合。这真是错误的设计。

您的方法canMove属于单件。因此,它的定义应该反映这样一个事实:

bool canMove() const
{
  return value == 13;
}

要从2D阵列中获得您想要的东西,只需执行以下操作:

board[x][y].canMove()

当然,你可以创建一个新的类Board来封装它的行为,就像方法canMove有两个参数一样。