如何通过函数传递数组并将其返回
How to pass an array through functions and return it back
目前我有一个主函数调用 GenerateMap 函数,GenerateMap 函数做了它应该做的事情,但我想把它传回 int main 中的 Map[][]。即使代码按预期运行,也会出现运行时错误。
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid
有人可以帮我解决这个问题吗?我是编程的半新手,所以有人可以向我解释我需要做什么。 谢谢!
法典
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>
using namespace std;
string GenerateMap() {
int MapDimension = 5;
string Map[MapDimension][MapDimension];
for (int i = 0; i <= MapDimension-1; ++i) {
for (int j = 0; j <= MapDimension-1; ++j) {
int random = rand() % 6;
string x;
switch (random) {
case 0:
x = "D";
break;
case 1:
x = "F";
break;
case 2:
x = "P";
break;
case 3:
x = "M";
break;
case 4:
x = "L";
break;
case 5:
x = "S";
break;
}
Map[i][j] = x;
cout <<"[" << Map[i][j] << "]" << " ";
}
cout << endl;
}
return 0;
}
void MoveForward(){
}
void MoveBackward() {
}
void MoveLeft(){
}
void MoveRight(){
}
void Player() {
string Player;
}
int main() {
GenerateMap();
}
string GenerateMap() {
// ...
return 0;
}
哎 呦!
这实际上是编译的,因为0
是一个空指针常量,它可以变成const char*
,可以用来初始化std::string
......除了从 NULL 指针构造一个std::string
是非法的。因此错误。
我不知道你实际上打算从那个函数中返回什么,因为你从来没有说过。
但我知道事实并非如此。
遗憾的是,C++对多维数组的支持相当弱,尤其是动态数组。通常,根本不使用它们而只使用一维std::vector
或std::array
通常更简单。
但是,如果您真的想使用多维数组并且在编译时知道大小,那么一个相对简单的解决方案是将多维数组包装在结构中,然后从 GenerateMap
返回。像这样:
struct Map {
static const int Dimension = 5;
std::string data[Dimension][Dimension];
};
Map GenerateMap() {
Map map;
for (int i = 0; i < Map::Dimension; ++i) {
for (int j = 0; j < Map::Dimension; ++j) {
std::string x;
// fill x...
map.data[i][j] = x;
}
}
return map;
}
int main() {
Map map = GenerateMap();
for (int i = 0; i < Map::Dimension; ++i) {
for (int j = 0; j < Map::Dimension; ++j) {
std::cout <<"[" << map.data[i][j] << "]" << " ";
}
std::cout << "n";
}
}
现场演示。
相关文章:
- 从 C++ 中的函数返回数组地址问题
- 如何在 c++ 函数中返回数组
- 如何从 c++ 中的函数返回数组
- 为什么 c++ 函数可以正确返回数组的大小?
- 解释通过从函数引用返回数组的语法
- (C++)我的函数不返回数组
- 如何按 C++ 中的值从函数返回数组
- 返回数组中值的指针地址
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 使用数组类返回数组c++
- 如何使函数返回数组?用于制作在VB.NET中使用的DLL
- 从函数 BY VALUE 返回数组,返回结构时会发生什么?
- 调用和打印函数,在 C++ 中返回数组
- 如何使用递归函数返回数组中整数的索引?
- 从函数返回数组时是否需要删除
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- C++返回数组而不进行动态内存分配?
- 在函数 c++ 中返回数组时出现问题
- 如何从C 中的函数返回数组
- 如何使类函数返回数组,然后将其调用并存储在 main 中