2016-04-12 3 views
-7

Я пытаюсь сделать простейшую из всех игр, но с функцией цикла.Вложение int main() внутри int main()

Я дал ошибка «функция разрешения не допускается здесь до„{“, а также целый список [Error] ожидаемому„}“в конце ввода.

Am I не разрешено гнездо междунар основной() в другой? это моя проблема вообще? Как выполнить этот код без вложенности?

Мои знания и опыт не распространяется не более чем на несколько глав в двух книгах.

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

int main() 
{ 
    char again = 'y'; 
    while (again == 'y') 


    int main() 
     { 

      srand(static_cast<unsigned int>(time (0))); 
      int secret = rand() % 100 +1; 
      int tries = 0; 
      int guess; 
      cout << "\tGuess the random number\n\n"; 

      do 
       { 
        cout << "Enter a guess: "; 
        cin >> guess; 
        ++ tries; 
        if (guess > secret) 
         { 
          cout << "Too High!\n\n:"; 
         } 
        else if (guess < secret) 
         { 
          cout << "Too Low!\n\n"; 
         } 
        else 
         { 
          cout << "\nThat's It! You go it in " << tries << " guesses!\n"; 
         } 
} while (guess != secret); 
} 

cout << "\n\tWould you like to play again? (y/n): "; 
char again; 
cin >> again; 


} 
+0

вы не разрешили гнездо основной с другой основной –

+7

* «Это моя проблема вообще?» * - да. WTH вы пытаетесь достичь? – LogicStuff

+2

Можете ли вы попытаться поставить точку с запятой после вложенного основного объекта так? 'int main();'. Это должно заставить его работать и вставить его в –

ответ

2

Насколько я знаю, вы не можете гнездиться int main() внутри int main() по ряду причин. В общем, вы не можете определить одну функцию внутри другой (определяя «локально»). Однако, даже если вы можете, ваше желание сделать это должно быть массивным красным флагом, что ваш дизайн выключен.

Примечание: Как Натан Оливер отметил в комментариях, вы можете вперед объявить функцию «локально» (в другой функции), но фактическая реализация должна быть снаружи. Даже делая это, вы должны сначала угадать свой дизайн на этом этапе.

Вы должны спросить себя, что вы пытаетесь сделать.

  • Вы хотите сгруппировать код вместе с функцией для вызова повторно? Затем создайте отдельную функцию (с другим именем) за пределами от main().

  • Вы хотите повторить код? Если это так, вам нужен цикл или рекурсивная структура функций.

  • Вы хотите разделить какое-то поведение на несколько функций, но скрыть все, кроме одной функции? Если это так, посмотрите на классы (не обязательно объекты - вы можете также статические классы.)

Таковы лишь три из много возможностей, и решить, что именно вы хотите сделать, и как вы хотите для того, чтобы сделать это, вы сами решаете, как программист.

Краткое описание: насколько C++ (и C), , если вы пытаетесь объявить какую-либо функцию внутри любой другой функции, вы делаете что-то серьезно неправильное в дизайне.


На более техническом примечании, вы также должны четко понимать, что int main() есть. Это специальная функция, которая является точкой ввода для вашей программы. Программа C или C++ не может работать без int main().

Чтобы ваша программа работала, у вас должен быть один экземпляр этой функции в main.cpp. Если у вас более одного int main(), компьютер, скорее всего, не сможет найти точку входа.

Кроме того, наличие более чем одной функции под названием main()в любом месте в вашем коде - отличный способ запутать себя и других.

Короче говоря, у вас должен быть только один int main() за программу, без исключений.

+1

Локальные определения функций являются незаконным периодом, это не ограничивается только 'main()'. – NathanOliver

+0

Также обратите внимание, что объявление функции локально вполне нормально: http://coliru.stacked-crooked.com/a/76f71f801cf41043 – NathanOliver

+0

Да, я пытался это понять. – CodeMouse92

3

Ваша проблема заключается в основной функции внутри существующей основной функции. (Это недопустимо.) В общем, (за исключением некоторых вещей, которые вы можете сделать с structs/lambdas, которые приближают такую ​​функциональность), вы не должны встраивать функции внутри друг друга. Если вы просто удалить объявление функции, то ваш код должен работать нормально:

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

int main() 
{ 
    char again = 'y'; 
    while (again == 'y') 

     { 

      srand(static_cast<unsigned int>(time (0))); 
      int secret = rand() % 100 +1; 
      int tries = 0; 
      int guess; 
      cout << "\tGuess the random number\n\n"; 

      do 
       { 
        cout << "Enter a guess: "; 
        cin >> guess; 
        ++ tries; 
        if (guess > secret) 
         { 
          cout << "Too High!\n\n:"; 
         } 
        else if (guess < secret) 
         { 
          cout << "Too Low!\n\n"; 
         } 
        else 
         { 
          cout << "\nThat's It! You go it in " << tries << " guesses!\n"; 
         } 
       } while (guess != secret); 

      cout << "\n\tWould you like to play again? (y/n): "; 
      cin >> again; 
     } 


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