По какой-то причине моя программа не позвонит мне на главную. Я пытаюсь повторить программу, поэтому я могу продолжать добавлять материал в основную часть, но он будет делать вид, что main is not there и пропустить его.
Heres мой код, ive отслеживал его по строкам и даже когда я вхожу в правильную информацию, которую он просто отказывается читать в int main(); Есть предположения?
edit: im the moron. Спасибо за помощь!
#include <iostream>
using namespace std;
,,
int main()
{
// New OrderedList
OrderedList OrderedList;//no constructor called - is head initialized to NULL?
char repeat;
int choice = 0, data;
cout << "Choose from the following menu options,\n"
<< "1: Add an item\n"
<< "2: Search for an item\n"
<< "3: Delete an item\n"
<< "4: Display the list\n"
<< "5: Destroy the list\n";
cin >> choice;
if (choice <= 3)
{
cout << "\nPlease enter the item.";
cin >> data;
}
switch(choice)
{
case 1:
OrderedList.Insert(data);
break;
case 2:
OrderedList.Search(data);
break;
case 3:
OrderedList.Delete(data);
break;
case 4:
OrderedList.Print();
break;
case 5:
//delete OrderedList; "no constructor called - is head initialized to NULL?"
break;
}
cout << "Repeat Y/N?\n";
cin >> repeat;
if (repeat == 'y' || repeat == 'Y')
int main();
return 0;
}
Вы никогда не должны вызывать main
функцию внутри приложения, вместо этого вы можете попробовать использовать во while
цикла.
int main(){
char repeat = 'Y';
while( repeat == 'y' || repeat == 'Y' )
{
//do some stuff
cout << "Repeat? Y/N" << endl;
cin >> repeat;
}
return 0;
}
Удачи!
Вы просто не должны называть main()
рекурсивно, на самом деле, вы не должны его вообще называть. Фактически, стандарт C++ запрещает вызов с использованием main в "потенциально оцениваемом выражении", см. §3.6.1.3
стандарта (как указывает @Captain Obvlious). main()
- это функция запуска C++ вашей программы, вызывается библиотекой времени выполнения после выполнения всех других (возможных) инициализаций.
Если вы хотите повторить его в main()
, просто используйте цикл while
(или for
).
PS: Кажется, что работает следующее:
Используйте статическую переменную как условие остановки и вызовите main()
рекурсивно, однако я должен сказать, что я никогда не видел эту практику, и я бы не рекомендовал ее вообще. Просто испытал, что это работает:
#include <iostream>
using namespace std;
// calling main() 10 times, recursively
int main() {
static int i = 10;
cout << "Hello, World!" << endl;
i--;
if(i>0)
main();
}
Однако, если вы компилируете с -pedantic
или -pedantic-errors
, вы получите предупреждение/ошибку соответственно, заявив, что вы не должны/не можете вызвать main()
;
Если вы измените строку
int main();
(который является объявлением функции)
main();
который будет вызовом функции, он, вероятно, сработает. Однако было бы лучше обернуть содержимое основного в цикле.
EDIT: Я только что проверил стандарты, и, что интересно, рекурсивные призывы к main
являются незаконными только в C++. Я нахожу это удивительным.
EDIT 2: О, вопрос помечен C++. В этом случае вам запрещено вызова main
рекурсивно! Демоны выйдут из вашего носа и еще много чего.
main
независимо от того, рекурсивно это или нет. Разрешено ли это в C или нет, не имеет значения, так как вопрос помечен C ++.
Не вызывайте main. Вместо этого используйте следующий 1 вкладыш
int main(int argc, char* argv[]) {
return (myMain(argc, char* argv[]);)
}
использовать свой собственный главный... который можно назвать рекурсивно.
int myMain(int argc, char* argv[])
{
// what ever you want, including recursion,
// but do not call what you are using for "int main(int, char**)"
}
Однако теперь вы должны уметь видеть, что "основное" имеет особое значение для всех ваших сверстников, поэтому есть только путаница в использовании любых вариантов "основной".
Пример: в моем файле "dumy142.cc" я предпочитаю использовать (несколько) более значимое имя, например "int t142 (int argc, char * argv [])":
int main(int argc, char* argv[]) {
return(t142(arc, argv);
}
int main();
<= объявление. (2) Вы никогда не должны вызыватьmain()
. Вы должны создать другую функцию.