Переменная массива C ++ в классе вызывает ошибку «не была объявлена ​​в этой области» в одной функции файла реализации, но не в конструкторе - PullRequest
0 голосов
/ 25 мая 2020

Название говорит само за себя. Мне нужно написать программу для курса программного обеспечения, который я беру, который сравнивает два базовых алгоритма c друг с другом в игре в шашки. Для этого у меня есть класс Square, который хранит, занят ли квадрат (bool), каким игроком (enum Pl, NA, P1 или P2) и метку этого квадрата (Index, int). Затем я создал класс Board, который по сути представляет собой двумерный массив квадратов, размеры которого будут указаны пользователем. Однако в файле реализации моего класса Board у меня возникла ошибка при использовании массива board [] [] в одной из моих функций. Я получаю сообщение об ошибке «плата не была объявлена ​​в этой области», что не должно быть слишком сложно понять, за исключением того, что тот же синтаксис (по крайней мере, из того, что я вижу, и я работал над исправлением этого для некоторое время сейчас), вызывающая ошибку, отлично работает в конструкторе класса Board в том же файле. Ниже приведен код моего файла Board.h и соответствующих частей моего Board. cpp файл:

Board.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, я понимаю, что и в этом могут быть ошибки, но я специально просто ищу помощь в исправлении ошибки, которую я получаю с Board массив в canMovL (). Спасибо.

1 Ответ

2 голосов
/ 25 мая 2020

bool canMoveL(int i, int j)

должно быть

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

иначе вы определяете бесплатную функцию, не связанную с Board.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...