重新运行我的主要方法

Rerunning my main method

我刚刚通过终端控制台命令完成了 运行 的图像编辑器。编辑图像后,我试图让整个程序(通过 main() 方法)再次达到 运行 但我对如何操作有点困惑。 这是我尝试用来重新运行代码的方法。

void rerun()
{
    cout << "Would you like to alter another image? (Y/N) ";
    string answer;
    getline(cin, answer);
    while (answer != "Y" || answer != "N")

        if (answer == "N") {
            return;
        }
    if (answer == "Y") {
        main();
    }
}

这没有给我任何东西。我需要修复什么?

C++ 标准禁止直接调用 main(),就像您尝试做的那样:

3.6 Start and termination

...

3 - The function main shall not be used within a program.

main() 只能由您的操作系统从您的环境中调用。您不能直接调用它。

因此,您需要重构程序的逻辑,以便在需要时具有重新运行整个程序的效果。例如:

int main(int argc, char **argv)
{
    int ret;

    do
    {
        ret = your_real_main(argc, argv);
    } while (ret == -1);

    return ret;
}

无论您当前的 main() 中有什么,都将其重命名为 you_real_main()(并相应地声明),如果 your_real_main() returns -1,它将被重新执行,就像它被再次调用一样。所有其他 return 值从 main() 本身获得 returned,并为您的 C++ 实现携带它们所做的任何暗示。

请随意使用 your_real_main() 中的任何特殊 return 值来实现此行为,而不是 -1。

当然,您有责任采取一切必要措施使这项工作正常进行。比如清理你分配的所有资源,所以到 your_real_main() returns 的时候,已经分配的所有资源都被释放了,你的应用程序的状态和它启动时的状态是一样的(所有 dynamically-allocated 内存已释放,所有文件已关闭,等等...)。

通过一些周密的计划,也可以通过使用 carefully-thrown 异常而不是特殊的 return 值来实现相同的结果。然后可能有操作system-specific实现相同目标的方法,例如Linux上的exec(),还有...