C ++。无法将2D数组指针传递给函数

时间:2015-10-14 16:34:22

标签: c++ c arrays

我正在制作一个基于文本的小游戏。 如果我在main函数中使用它,我的代码可以工作,但是当我尝试将它放入它自己的函数时,它会用垃圾数据填充我的字符串,最终导致程序在尝试读取数据时崩溃。

所以这是我的问题,我应该如何将我的房间指针的2D数组传递到我的函数中,这样我就可以获得与我在主函数中保存代码时相同的结果。

以下是我函数中当前的代码,它不在函数中时可以正常工作。

void InitialiseLevel(int CurrentLevel, Room *Level[2][2]){
if (CurrentLevel == 1){

    JumpScareRoom JSRoom1;
    Room *room1 = &JSRoom1;
    JSRoom1.SetExits("se");
    JSRoom1.SetDescriptions("I am a jumpscare room.", "I am a boring room 1");
    JSRoom1.SetSouthMessages("There is a door to the SOUTH", "You exit through the SOUTH door.");
    JSRoom1.SetEastMessages("There is a door to the EAST", "You exit through the EAST door.");
    Room room2;
    room2.SetExits("ws");
    room2.SetDescriptions("I am a cool room 2", "I am a boring room 2");
    Room room3;
    room3.SetExits("ne");
    room3.SetDescriptions("I am a cool room 3", "I am a boring room 3");
    Room room4;
    room4.SetExits("wn");
    room4.SetDescriptions("I am a cool room 4", "I am a boring room 4");

    Level[0][0] = room1;
    Level[0][1] = &room2;
    Level[1][0] = &room3;
    Level[1][1] = &room4;
}
}

我的主要将数组初始化为

Room *Rooms[2][2] = {};

然后使用

调用该函数
InitialiseLevel(1, Rooms); // set up level 1.

我尝试了很多不同的方法,例如使用

void InitialiseLevel(int CurrentLevel, Room **Level[2][2])

void InitialiseLevel(int CurrentLevel, Room *(&Level)[2][2])
然而,我似乎错过了一些重要的事情。

1 个答案:

答案 0 :(得分:0)

JumpScareRoom JSRoom1;

是一个本地对象,当您退出函数作用域时,它将失效。相反,您可以使用:

JumpScareRoom *pJSRoom1 = new JumpScareRoom();
Room *room1 = JSRoom1;
JSRoom1->SetExits("se");
JSRoom1->SetDescriptions("I am a jumpscare room.", "I am a boring room 1");
JSRoom1->SetSouthMessages("There is a door to the SOUTH", "You exit through the SOUTH door.");
JSRoom1->SetEastMessages("There is a door to the EAST", "You exit through the EAST door.");
...