我正在尝试用c ++制作一个游戏,玩家必须移动3个"@"字符,或者在游戏中称为熊。
我似乎无法访问为程序中的各种项目(例如熊和炸弹(创建的结构内容。例如,x 坐标和符号在被调用的函数中无法访问,所以我假设这与我传递的参数和我的向量未正确初始化有关。代码如下:
const char BEAR('@');
const int SIZEX(10); //horizontal dimension
const int SIZEY(6); //vertical dimension
struct Item {
int x, y;
char symbol;
};
vector<Item> bear(3); //there are supposed to be 3 bears
int main()
{
void initialiseGame(char g[][SIZEX], char m[][SIZEX], vector<Item>& b);
//local variable declarations
char grid[SIZEY][SIZEX]; //grid for display
char maze[SIZEY][SIZEX]; //structure of the maze
initialiseGame(grid, maze, bear); //initialise grid (incl. walls & bear)
//other irrelevant stuff
return 0;
}
void initialiseGame(char grid[][SIZEX], char maze[][SIZEX], vector<Item>& bear)
{ //initialise grid & place bear in middle
void setInitialMazeStructure(char maze[][SIZEX], vector<Item>& bear);
void setInitialDataFromMaze(char maze[][SIZEX], vector<Item>& bear);
void updateGrid(char g[][SIZEX], const char m[][SIZEX], vector<Item>& bear);
setInitialMazeStructure(maze, bear); //initialise maze
setInitialDataFromMaze(maze, bear); //initialise bear's position
updateGrid(grid, maze, bear); //prepare grid
}
void setInitialMazeStructure(char maze[][SIZEX], vector<Item>& bear)
{ //set the position of the walls in the maze
//initialise maze configuration
int initialMaze[SIZEY][SIZEX] //local array to store the maze structure
= { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 2, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 2, 0, 1, 0, 0, 1, 0, 0, 1 },
{ 1, 2, 0, 1, 1, 0, 1, 0, 1, 1 },
{ 1, 1, 0, 0, 0, 1, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
// with 1 for wall, 0 for tunnel, etc.
//copy into maze structure
for (int row(0); row < SIZEY; ++row)
for (int col(0); col < SIZEX; ++col)
switch (initialMaze[row][col])
{
case 0: maze[row][col] = TUNNEL; break;
case 1: maze[row][col] = WALL; break;
case 2: maze[row][col] = BEAR; break;
}
}
void setInitialDataFromMaze(char maze[][SIZEX], const vector<Item>& bear)
{ //extract bear's coordinates from initial maze info
for (int row(0); row < SIZEY; ++row)
for (int col(0); col < SIZEX; ++col)
switch (maze[row][col])
{
case bear:
{
bear.x = col;
bear.y = row;
maze[row][col] = TUNNEL;
}
break;
}
}
setInitialiDateFromMaze(( 中的这个开关语句是我得到关于 Item 向量的错误的地方,错误指出 x 和 y 以及符号作为我的结构 Item 的成员不存在。
for (int row(0); row < SIZEY; ++row)
for (int col(0); col < SIZEX; ++col)
switch (maze[row][col])
{
case bear:
{
bear.x = col;
bear.y = row;
maze[row][col] = TUNNEL;
}
break;
}
我该怎么做才能修复此错误?我的 3 只熊的向量是否正确传递?
std::vector 没有成员数据 x 和 y。因此,您使用向量的方式是错误的。您应该通过以下方式访问 x 和 y:
bear[i].x
边界检查:
bear.at(i).x
case bear:
bear
声明为:
vector<Item> bear(3);
switch
中的case
值必须是单个文本常量值。 bear
是一个向量,不清楚你的意图是什么,但这就是你编译错误的原因。更不用说,随后bear.x
和bear.y
也没有意义,因为bear
是一个vector
,它既没有x
,也没有y
作为类成员。