【问题标题】:Dont know how to fix: expected primary-expression before '.' token不知道如何解决:“。”之前的预期主表达式令牌
【发布时间】:2021-04-03 20:17:27
【问题描述】:

我目前刚刚开始使用 C++ 进行编码,我正在从事的当前项目是制作控制台内国际象棋引擎类型的东西。下面的函数应该检查一个特定的方块上是否有一块,如果有,如果是白色的。 Board.grid 是一个二维字符串数组,其中" " 是一个空方格,"wR1" 是白车之一,"bQ1" 黑皇后等等。我在函数内部的两个 if 语句中都收到了错误 expected primary-expression before '.' token,并认为这与在“方字符串”上调用的 .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;
        };

    };

【问题讨论】:

  • minimal reproducible example 会替换很多词,同时这些词是无用的,因为不要透露有用的信息。
  • Board 未定义。
  • bool arr[2] = ...return arr; 在显示的函数中没有任何意义。
  • 作为一个关于您的错误的猜测Board.grid[square[1]][square[0]] 不是具有at 成员函数的对象。但由于我们不知道BoardBoard.grid 可能是什么,这只是一个猜测。
  • @JordvanEldik — 这对于您的代码可能已经足够了,但对于可重现的示例来说还不够。

标签: c++ function if-statement compiler-errors


【解决方案1】:

符号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

【讨论】:

    猜你喜欢
    • 2012-10-30
    • 2020-10-30
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2017-02-01
    相关资源
    最近更新 更多