返回时导致错误的递归函数(c ++)

时间:2013-09-06 19:50:37

标签: c++ recursion sdl box2d

我的程序在两个(理论上)连续的代码行之间出错,并且不知道是什么原因引起的。

我的整个代码很庞大,所以这是基础知识;

int playRoom(std::string currentRoom = "Storage_room", std::string entryDoor = "NULL"){
    log("Starting playRoom()");

    // code to play the level
    // includes setting up box2d world
    // and playing the level

    if(playerWantsRestart){
        log("Restart level");
        return playRoom(savedData.roomName, savedData.entryDoor);
    }

    log("Leaving playRoom()");
    return 0;
}

int main( int argc, char* args[] ){
    // Set up SDL etc..
    playRoom();
    log("Back in main()");
    // Close SDL
    return 0;
}

如果我从不使用重启选项,一切都很好。 如果我使用它,程序将退出状态3,日志文件显示为:

Starting playRoom()
Restart level
Starting playRoom()
Leaving playRoom()

所以错误似乎在“返回0;”?我不认为状态3是溢出,并且它只是一次被递归(?),所以... 我正在使用Codeblocks 12.11,使用GNU GCC进行编译。任何帮助或想法都会很棒!

2 个答案:

答案 0 :(得分:0)

int playRoom(std::string currentRoom = "Storage_room", std::string entryDoor = "NULL")

你为什么使用int?我会使用布尔值。

Either way read this.

你正在调用两种不同类型的方法,不确定他们是否更新了java以包含这种语法糖。我已经离开了圈子但是。

playRoom();

此函数默认情况下方法中的方法应设置currentRoom和entryDoor。

然后用它重载。

playRoom(string currentRoom , string entryDoor);

答案 1 :(得分:0)

尝试从if条件中删除 return 语句。