2015-10-14 43 views
-1

我正在製作一個基於文本的小型遊戲。 我的代碼工作,如果我在主要功能,但試圖把它放到它自己的功能它填充我的字符串與垃圾數據,它最終會導致程序崩潰,當它試圖讀取數據。C++。無法將二維數組指針傳入函數

所以這裏是我的問題,我應該如何將我的二維數組房間指針傳入我的函數,這樣我可以得到相同的結果,如果我只是將代碼保留在我的主函數中。

以下是目前在我的函數中的代碼,當不在函數中時它將正常工作。

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]) 

但是我似乎錯過了一些重要的東西。

+0

@回答那一個潛在的問題與代碼,但沒有回答如何通過X * [] []的功能,其中它不是一個副本 – NathanOliver

+0

感謝您的信息πάνταῥεῖ ,但是由於在發佈這篇文章時我並沒有意識到這是指針超出範圍而導致問題,所以在這個問題上給出的信息讓我更加困惑。 –

+0

@YuriSuzumiya *不要*用「已解決」或包含答案更新問題。這就是答案的答案(如果沒有答案是完整的,你可以自由寫自己的答案)。 – crashmstr

回答

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."); 
... 
+0

謝謝,這有助於我理解發生了什麼。我現在就試試這個 –