我正在尝试制作一个解决迷宫的程序,虽然算法很合理(至少在我看来是这样),但我一直遇到二维数组的障碍。我来自 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/