在C++中传递结构数组 - 被调用函数中不存在结构元素,如何正确传递向量?



我正在尝试用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.xbear.y也没有意义,因为bear是一个vector,它既没有x,也没有y作为类成员。

最新更新