c++ - 将类级二维数组变量设置为传入值 - C++

标签 c++ arrays pointers 2d

我正在尝试制作一个解决迷宫的程序,虽然算法很合理(至少在我看来是这样),但我一直遇到二维数组的障碍。我来自 C# 和 Java,所以语法让我很伤心。

这是一个 SSCCE:

//Main.cpp

#include "MazeSolver.h"

int main()
{
     MazeSolver mazeSolver;

     char maze[51][51] = { }; // Not bothering to show code for populating the array

     mazeSolver.setMaze(maze);
}

//MazeSolver.cpp

#include "MazeSolver.h"

MazeSolver::MazeSolver() { }

void MazeSolver::setMaze(char maze[51][51])
{
     this->maze = maze;
}

//MazeSolver.h

#ifndef _MAZESOLVER_H
#define _MAZESOLVER_H

class MazeSolver
{
private:
     char **maze; // This is likely the problem, I'm at wits end in regards to
                  // what notation is needed here.  I do not want to hard-copy
                  // the entire array, I just need to access it (via pointer)
                  // I've also tried just using char maze[51][51] here, char *maze, etc...
public:
      MazeSolver();
      void setMaze(char maze[51][51]);
}

最佳答案

您不能将二维数组 (array[ROWS][COLUMNS]) 分配(或转换)为指向指针(aka **)的指针,因为 a 的内存布局二维数组(可能)与指针的指针可能指向的内存布局非常不同。

检查 this thread有关此主题的更多信息。

如果建议您使用事实上的 C++ 标准容器 std::vector,而不是普通数组:

class MazeSolver
{
    std::vector<std::vector<char>> maze;

    void setMaze( const std::vector<std::vector<char>>& new_maze )
    {
        maze = new_maze;
    }
};

请注意,默认情况下 vector 的大小为 0(在其初始化时),因此您应该用元素填充它:

for( std::size_t i = 0 i < ROWS ; ++i )
{
    maze.push_back( std::vector<char>() );

    for( std::size_t j = 0 ; j < COLUMNS ; ++j )
       maze[i].push_back( ' ' );
}

但是,C++11(语言的当前迭代)有一个 std::array 容器,它类似于 C 数组,但具有其他标准库容器的接口(interface):

std::array<char,ROWS*COLUMNS> maze;

关于c++ - 将类级二维数组变量设置为传入值 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21680677/

相关文章:

javascript - 我如何使用dos批处理文件获取文件夹中的文件夹列表并将其转换为javascript数组?

javascript - 增加数组中元素的值

c - getchar() != EOF 循环查看下一个字符

计算传递给函数的数组中的元素数量

c++ - MFC:如何获取DLL文件名?

c++ - cv::perspectiveTransform 断言失败

c++ - 如何在始终选择第一个元素并过滤其余元素的范围内创建 View ?

c++ - 为什么复制构造函数在C++中直接使用私有(private)属性

pointers - 测试嵌套结构中的 nil 值

c++ - 指向另一个类的方法的指针