不知道如何修复:'.' 之前的预期主表达式令牌

Dont know how to fix: expected primary-expression before '.' token

我目前刚刚开始使用 C++ 进行编码,我目前正在进行的项目是制作控制台内国际象棋引擎类型的东西。下面的函数应该检查一个特定的方块上是否有棋子,如果有,棋子是否是白色的。 Board.grid 是一个二维字符串数组,其中 " " 是一个空方块,"wR1" 是白车之一,"bQ1" 是黑皇后,等等。我在函数内的两个 if 语句上都得到了错误 expected primary-expression before '.' token,并认为它与在 'square string' 上调用的 .at() 函数有关,但不知道为什么这会出错或可以做些什么来解决它。

如果有人能帮助我,我将不胜感激。提前致谢!

#include <iostream>

using namespace std;

struct Board {
    string Grid[8][8] =
    {
        {"bR1", "bN1", "bB1", "bQ1", "bK1", "bB2", "bN2", "bR2"},
        {"bp1", "bp2", "bp3", "bp4", "bp5", "bp6", "bp7", "bp8"},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"wp1", "wp2", "wp3", "wp4", "wp5", "wp6", "wp7", "wp8"},
        {"wR1", "wN1", "wB1", "wQ1", "wK1", "wB2", "wN2", "wR2"},
    };
};


class Piece
    {
    public:
        bool getSquare (int square[2])
        {
            bool isOccupied = false;
            bool isWhite = false;
            if (Board.grid[square[1]][square[0]].at(0) != ' '){isOccupied = true;};
            if (Board.grid[square[1]][square[0]].at(0) == 'w'){isWhite = true;};
            bool arr[2] = {isOccupied, isWhite};
            return arr;
        };

    };

符号 Board 是一个 类型 而不是实例。在 C++ 中,您不能使用 . 运算符访问类型成员,只能访问对象成员。

简单的解决方案是创建一个 Board 对象:

struct /* Anonymous structure */ {
    string Grid[8][8] =
    {
        {"bR1", "bN1", "bB1", "bQ1", "bK1", "bB2", "bN2", "bR2"},
        {"bp1", "bp2", "bp3", "bp4", "bp5", "bp6", "bp7", "bp8"},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"wp1", "wp2", "wp3", "wp4", "wp5", "wp6", "wp7", "wp8"},
        {"wR1", "wN1", "wB1", "wQ1", "wK1", "wB2", "wN2", "wR2"},
    };
} Board;  // Define the Board structure object instance

或者可能将 Board 定义为命名空间,并使用范围运算符:

namespace Board {
    string Grid[8][8] =
    {
        {"bR1", "bN1", "bB1", "bQ1", "bK1", "bB2", "bN2", "bR2"},
        {"bp1", "bp2", "bp3", "bp4", "bp5", "bp6", "bp7", "bp8"},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"   ", "   ", "   ", "   ", "   ", "   ", "   ", "   "},
        {"wp1", "wp2", "wp3", "wp4", "wp5", "wp6", "wp7", "wp8"},
        {"wR1", "wN1", "wB1", "wQ1", "wK1", "wB2", "wN2", "wR2"},
    };
}

// ...

Board::grid[square[1]][square[0]].at(0)
//   ^^
// Note use of scope operator :: here