c++ - 类中的 C++ 数组变量在实现文件的一个函数中导致“未在此范围内声明”错误,但在构造函数中没有
问题描述
标题基本概括了所有内容。我需要为我正在学习的软件课程编写一个程序,该课程将两种基本算法放在跳棋游戏中。为此,我有一个 Square 类,用于存储方格是否被占用(布尔值)、哪个玩家(枚举 Pl、NA、P1 或 P2)以及该方格的标签(索引,整数)。然后我创建了一个 Board 类,它实际上是一个二维的 Squares 数组,其尺寸由用户指定。但是,在我的 Board 类的实现文件中,我在我的一个函数中使用 board[][] 数组时出错。我收到错误“板未在此范围内声明”,这不应该太难弄清楚,除了完全相同的语法(至少从我所见,我一直在努力解决这个问题一会儿)那个' s 导致错误在同一文件中 Board 类的构造函数中完美运行。下面是我的 Board.h 文件的代码,以及我的 Board.cpp 文件的相关部分:
板.h:
#ifndef BOARD_H
#define BOARD_H
#include "Square.h"
#include <string>
class Board
{
public:
Board(int);
int getBsize();
int getWinner();
std::string getCmove();
Square getSquare(int, int);
void setWinner(int);
void setCmove(std::string);
bool canMoveL(int, int);
bool canMoveR(int, int);
bool canTakeL(int, int);
bool canTakeR(int, int);
void P1Move(int, int);
void P2Move(int, int);
void printCmove(std::string);
void printWin(std::string);
private:
Square board[12][12];
int bSize;
int winner;
std::string cMove;
};
#endif // BOARD_H
Board.cpp 构造函数以及文件顶部(如果错误与我包含在 Board.cpp 中的库和文件有关):
#include "Square.h"
#include "Board.h"
#include <string>
Board::Board(int bSize)
{
Board::bSize = bSize;
Board::winner = 0;
Board::cMove = "";
Board::board[12][12];
int x = bSize-1;
int index = 1;
for(int j = 0; j < bSize; j++)
{
for(int i = 0; i < bSize; i++)
{
if(((i%2!=0)&&(j%2==0))||((i%2==0)&&(j%2!=0)))
{
if((j==x/2)||(j==x/2+1))
{
board[i][j] = Square(false, NA, index);
index++;
}
else if(j < x/2)
{
board[i][j] = Square(true, P1, index);
index++;
}
else if(j > x/2+1)
{
board[i][j] = Square(true, P2, index);
index++;
}
}
else
{
board[i][j] = Square(false, NA, 0);
}
}
}
}
Board.cpp 中的函数导致错误:
bool canMoveL(int i, int j)
{
bool temp = false;
Square sq = board[i][j];
if((i-1 < 0)||((sq.getPl() == P1)&&(j-1 >= bSize))||((sq.getPl() == P2)&&(j-1 < 0)))
{
return temp;
}
if(sq.getOcc() == 0)
{
return temp;
}
else
{
if(sq.getPl() == P1)
{
temp = true;
}
else if(sq.getPl() == P2)
{
temp = true;
}
}
return temp;
}
注意:由于我无法测试 canMovL 函数,因此我意识到其中也可能存在错误,但我只是在寻求帮助解决我在 canMovL() 中使用板数组时遇到的错误。谢谢。
解决方案
bool canMoveL(int i, int j)
应该
bool Board::canMoveL(int i, int j)
.
否则,您定义与Board
.
推荐阅读
- c# - 尝试使用 DataRowView 访问时,DataGrid 的 WPF-DataGridTemplate 列在后面的代码中不可用
- python - 与多行循环相比,单行循环是否节省了 python 代码的运行时间?
- kotlin - 如何表达对实现接口的 lambda 的“this”引用?
- powershell - ls | wc -l inside if 语句不起作用
- python - 我想在python上计算不同形状的面积
- html - css在悬停+动画叠加时显示图像
- angular - 如何在角度 9 中显示数据数组而不重复?
- javascript - 本机反应:与“KeyboardAwareScrollView”一起使用不起作用
- python - 考虑各种列条件对唯一元素进行分类和计数
- java - 摄影并插入 Android 应用程序