2017-01-31 5 views
3

Я только что закончил редактор изображений, который запускается через команды консоли терминала. После того, как изображение отредактировано, я пытаюсь запустить всю программу (с помощью метода 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

Вам, вероятно, повезло бы с помощью цикла внутри 'main'. – Kevin

+0

Стандарт C++ запрещает вызов основного кода. – Ari0nhh

+2

Пожалуйста, отправьте сообщение [mcve]. –

ответ

2

стандарт 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, также ...

+0

Просто ответ, который я искал. Спасибо чувак! Он работает отлично. – Caladin00

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