目前我有main函数调用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();
}
答案 0 :(得分:2)
string GenerateMap() {
// ...
return 0;
}
糟糕!
这实际上是编译的,因为0
是一个空指针常量,可以变成const char*
,可用于初始化std::string
...除了构造std::string
从NULL指针是非法的。因此错误。
我不知道你真正打算从该功能返回什么,正如你从未说过的那样。
但我知道不是那样。
答案 1 :(得分:0)
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";
}
}