我正在编写一个跳棋游戏作为面向对象设计的一种实践形式。我得到的错误如下:
首先是代码:
#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行第7行[错误]'p'未在此范围内声明
我认为问题是对象是在外部函数中创建的。但是,使用extern会产生比我现有的问题更多的问题,并且在函数外部创建它们是不可能的,因为“for(int i = 0; i&lt; = 23; ++ i)”语句需要在函数内部发生。
我的问题是:如何将这些对象(Piece p [0],Piece p [1]等)称为printt()函数?
非常感谢,对不起,如果这个问题很愚蠢,我对编程很陌生。
答案 0 :(得分: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
类实现默认构造函数,以确保在构造时合理初始化实例的int字段。