首页 > 解决方案 > 类中的 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() 中使用板数组时遇到的错误。谢谢。

标签: c++arraysclass

解决方案


bool canMoveL(int i, int j)

应该

bool Board::canMoveL(int i, int j).

否则,您定义与Board.


推荐阅读