массивы — Создание глобальных созданных объектов [C ++]

Я программирую игру в шашки как форму практики объектно-ориентированного дизайна. Я получаю следующую ошибку:

Сначала код:

#include <iostream>
#include <stdio.h>

using namespace std;

class Piece {

public:
int ypos, xpos, index;
string color, kind;

int getY(void)
{
return ypos;
}

int getX(void)
{
return xpos;
}

int adjustY(int change)
{
ypos = ypos + change;
}

int adjustX(int change)
{
xpos = xpos + change;
}

};int form(void)
{
string p[24];
for (int i = 0; i <= 23; ++i)
{
if (i < 4)
{
Piece p[i];
p[i].color = "white";
p[i].ypos = 7;
p[i].xpos = i * 2;
p[i].index = i;
p[i].kind = "peon";

}

else if (i < 8)
{
int l;
l = i - 4;
Piece p[i];
p[i].color = "white";
p[i].ypos = 6;
p[i].xpos = 1 + (l * 2);
p[i].index = i;
p[i].kind = "peon";
}

else if (i < 12)
{
int m;
m = i - 8;
Piece p[i];
p[i].color = "white";
p[i].ypos = 5;
p[i].xpos = (m * 2);
p[i].index = i;
p[i].kind = "peon";
}

else if (i < 16)
{
int n;
n = i - 12;
Piece p[i];
p[i].color = "black";
p[i].ypos = 0;
p[i].xpos = 1 + (n * 2);
p[i].index = i;
p[i].kind = "peon";
}

else if (i < 20)
{
int pp;
pp = i - 16;
Piece p[i];
p[i].color = "black";
p[i].ypos = 1;
p[i].xpos = (pp * 2);
p[i].index = i;
p[i].kind = "peon";
}

else
{
int q;
q = i - 20;
Piece p[i];
p[i].color = "black";
p[i].ypos = 2;
p[i].xpos = 1 + (q * 2);
p[i].index = i;
p[i].kind = "peon";
}
}
}char matrix[8][8];int printt(void)
{
for (int i = 0; i = 7; ++i)
{
for (int j = 0; j = 7; ++j)
{
matrix[i][j] = '_';
}
}
for (int c = 0; c <= 23;++c)
{
int a, b;
a = p[c].ypos;
b = p[c].xpos;
switch(p[c].kind)
{
case "peon":
switch(p[c].color)
{
case "white":
matrix[a][b] = 'o';
break;

case "black":
matrix[a][b] = 'x';
break;

}
break;

case "damen":
switch(p[c].color)
{
case "white":
matrix[a][b] = 'O';
break;

case "black":
matrix[a][b] = 'X';
break;
}
break;
}

}
cout << "   0|1|2|3|4|5|6|7|  X Position (column)(j)" << endl;
cout << endl;
cout << "0  " << matrix[0][0] << "|" << matrix[0][1] << "|" << matrix[0][2] << "|" << matrix[0][3] << "|" << matrix[0][4] << "|" << matrix[0][5] << "|" << matrix[0][6] << "|" << matrix[0][7] << endl;
cout << "0  " << matrix[1][0] << "|" << matrix[1][1] << "|" << matrix[1][2] << "|" << matrix[1][3] << "|" << matrix[1][4] << "|" << matrix[1][5] << "|" << matrix[1][6] << "|" << matrix[1][7] << endl;
cout << "0  " << matrix[2][0] << "|" << matrix[2][1] << "|" << matrix[2][2] << "|" << matrix[2][3] << "|" << matrix[2][4] << "|" << matrix[2][5] << "|" << matrix[2][6] << "|" << matrix[2][7] << endl;
cout << "0  " << matrix[3][0] << "|" << matrix[3][1] << "|" << matrix[3][2] << "|" << matrix[3][3] << "|" << matrix[3][4] << "|" << matrix[3][5] << "|" << matrix[3][6] << "|" << matrix[3][7] << endl;
cout << "0  " << matrix[4][0] << "|" << matrix[4][1] << "|" << matrix[4][2] << "|" << matrix[4][3] << "|" << matrix[4][4] << "|" << matrix[4][5] << "|" << matrix[4][6] << "|" << matrix[4][7] << endl;
cout << "0  " << matrix[5][0] << "|" << matrix[5][1] << "|" << matrix[5][2] << "|" << matrix[5][3] << "|" << matrix[5][4] << "|" << matrix[5][5] << "|" << matrix[5][6] << "|" << matrix[5][7] << endl;
cout << "0  " << matrix[6][0] << "|" << matrix[6][1] << "|" << matrix[6][2] << "|" << matrix[6][3] << "|" << matrix[6][4] << "|" << matrix[6][5] << "|" << matrix[6][6] << "|" << matrix[6][7] << endl;
cout << "0  " << matrix[7][0] << "|" << matrix[7][1] << "|" << matrix[7][2] << "|" << matrix[7][3] << "|" << matrix[7][4] << "|" << matrix[7][5] << "|" << matrix[7][6] << "|" << matrix[7][7] << "   Y Position (line)(i)" << endl;
cout << endl;
}int main()
{
form();
printt();
cout << "End of Programm" << endl;
system ("pause");
return 0;
}

Тогда ошибка:

В функции ‘int printt ()’:

Строка 130 Col 7 [Ошибка] ‘p’ не был объявлен в этой области

Я предполагаю, что проблема в том, что объекты были созданы во внешней функции. Однако использование extern создает больше проблем, чем у меня уже есть, и создание их вне функции невозможно, для «for (int i = 0; i<= 23; ++ i) «оператор должен происходить внутри функции.

Мой вопрос: как я вызываю эти объекты (Piece p [0], Piece p [1] и т. Д.) В функции printt ()?

Большое спасибо, извините, если вопрос тупой, я довольно новичок в программировании.

0

Решение

Вы должны поставить это определение:

Piece p[24];

в глобальном масштабе, то есть, например, непосредственно перед определением f:

Piece p[24];

int form(void)
{
for (int i = 0; i <= 23; ++i)

То, как вы ссылаетесь на эти объекты в printt функция правильная.

Кроме того, вы должны удалить

Piece p[i];

заявления от int from() реализация.

Кроме того, вы можете реализовать конструктор по умолчанию для вашего Piece class, чтобы гарантировать, что int поля экземпляров будут разумно инициализированы при построении.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]