不知道如何修复:'.' 之前的预期主表达式令牌
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
我目前刚刚开始使用 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