gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:48:57 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com