2015-10-14 1 views
-1

Я делаю небольшую текстовую игру. мой код работает, если у меня есть его в основной функции, но при попытке включить его в свою собственную функцию он заполняет мои строки данными мусора, что в конечном итоге приводит к сбою программы при попытке прочитать данные.C++. Не удалось передать 2D-массив указателей в функцию

Итак, вот мой вопрос: как мне передать мой 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]) 

Однако, похоже, я что-то не хватает.

+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

Спасибо, что помогает мне понять, что происходит. Я попробую это сейчас –

Смежные вопросы