-2

我在多个网站上查看了很多关于如何将二维数组传递给函数的主题。但由于某种原因,它们似乎都没有正常工作。

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


void display(char maze[NUM_COLS],int NUM_ROWS);

int findpath(int x, int y);





int main(void)

{
 int NUM_ROWS;
 int NUM_COLS;
 std::cin >> NUM_ROWS >> NUM_COLS;
 std::string w;
 char maze[NUM_ROWS][NUM_COLS];

 getline(std::cin, w);


 for (int row = 0; row < NUM_ROWS; row++)
 {
    for(int col = 0; col < NUM_COLS; col++)
    {
        maze[row][col] = w[col + (row * NUM_COLS)];
    }
 }

 if ( find_path(0, 0) == 1 )
 {
  printf("Success!\n");
 }
 else
 {
  printf("Failed\n");
 }

  display(maze[NUM_COLS],int NUM_ROWS);


    return 0;

}


void display(char maze[NUM_COLS],int NUM_ROWS)
{

    printf("MAZE:\n");

    for ( int i = 0; i < num_rows; i++ )

        printf("%.*s\n", NUM_COLS, maze[i]);

    printf("\n");



    return;

}





int findpath(int x, int y)

{

    // If x,y is outside maze, return false.

    if ( x < 0 || x > NUM_COLS - 1 || y < 0 || y > NUM_ROWS - 1 ) 
    {
     return 0;
    }

    // If x,y is the goal, return 1.

    if ( maze[y][x] == 'G' ) 
    {
     return 1;
    }

    // If x,y is not open, return false.

    if ( maze[y][x] != ' ' && maze[y][x] != 'S' ) 
    {
     return 0;
    }


    // Mark x,y part of solution path.

    maze[y][x] = '+';

    // If find_path North of x,y is 1, return 1.

    if ( find_path(x, y - 1) == 1 ) 
    {
     return 1;
    }

    // If find_path East of x,y is 1, return 1.

    if ( find_path(x + 1, y) == 1 ) 
    {
     return 1;
    }

    // If find_path South of x,y is 1, return 1.

    if ( find_path(x, y + 1) == 1 ) 
    {
     return 1;
    {

    // If find_path West of x,y is 1, return 1.

    if ( find_path(x - 1, y) == 1 ) 
    {
     return 1;
    }

    // Unmark x,y as part of solution path.

    maze[y][x] = 'x';

    return 0;
}

我只是找不到任何方法来传递我的二维数组以使一切正常。如果我只是在 main 之外强制一个 2D 数组,这些函数就可以工作。但是当获取信息并将它们传递给函数时,它会给我声明错误。

void display(char maze[NUM_COLS],int NUM_ROWS);

  display(maze[NUM_COLS],int NUM_ROWS);

这是我的问题。当我编译时,我的错误是它没有接受我数组的任何部分。我只是不知道传入我的数组的正确方法。代码工作。如果我在全局范围内设置了一个二维数组,这样我就不必传递任何东西,并且函数可以抓取 NUM_COLS 和 NUM_ROWS 以及数组本身并将其弄乱,函数就会编译并运行。

4

1 回答 1

3
#include <iostream>
#include <cstdio>

template<typename T, size_t rows, size_t cols>
void display(T (&matrix)[rows][cols])
{
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < cols; j++)
            std::cout << matrix[i][j];
        std::cout << std::endl;
    }
}

int main()
{
    char maze[3][4] = {
        "asd",
        "123",
        "fgh"
    };
    display<char, 3, 4>(maze);
}
于 2012-10-21T08:50:04.237 回答