我刚刚完成了一个通过终端控制台命令运行的图像编辑器。编辑完图像后,我试图让整个程序(通过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();
}
}
这不能给我任何东西。我需要修理什么?
答案 0 :(得分:2)
C ++标准禁止直接调用main()
,就像您尝试这样做一样:
3.6开始和终止
...
3 - 函数main不得在程序中使用。
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()
返回-1,它将被重新执行,就好像它是再次调用。所有其他返回值都从main()
本身返回,并带有它们所做的任何暗示,用于C ++实现。
对于此行为,请随意使用your_real_main()
中的任何特殊返回值,而不是-1。
当然,您有责任尽一切可能使这项工作正常进行。比如清理你分配的所有资源,所以当your_real_main()
返回时,已经分配了所有已分配的内容,并且应用程序的状态与启动时的状态相同(所有动态分配的内存已经发布,所有文件都已关闭等等。)。
通过一些仔细的计划,也可以通过使用精心抛出的异常而不是特殊的返回值来实现相同的结果。然后可能有特定于操作系统的方法来实现相同的目标,例如Linux上的exec()
,也......