Название говорит само за себя. Мне нужно написать программу для курса программного обеспечения, который я изучаю, который сравнивает два основных алгоритма друг с другом в игре в шашки. Для этого у меня есть класс 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, я понимаю, что и здесь могут быть ошибки, но я специально просто ищу помощь в исправлении ошибки, которую я получаю с массивом платы в canMovL (). Спасибо.
1 ответ
bool canMoveL(int i, int j)
Должно быть
bool Board::canMoveL(int i, int j)
.
Иначе вы определяете бесплатную функцию, не связанную с Board
.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .