стандарт C++ запрещает прямое вызов main()
, как вы пытаетесь сделать:
3,6 Начало и окончание
...
3 - Функция основной не должен использоваться в рамках программы.
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()
все, что было выделено, было освобождено, а состояние вашего приложения идентично состоянию, которое было при его запуске (была выпущена все динамически выделенная память , все файлы были закрыты и т. д.).
С помощью некоторого тщательного планирования также можно реализовать тот же результат, используя тщательно исключенное исключение, а не специальное возвращаемое значение. Тогда могут быть операционные системные средства для достижения одних и тех же целей, например exec()
на Linux, также ...
Вам, вероятно, повезло бы с помощью цикла внутри 'main'. – Kevin
Стандарт C++ запрещает вызов основного кода. – Ari0nhh
Пожалуйста, отправьте сообщение [mcve]. –