Я хочу использовать две функции с повторением в одно и то же время, и у меня есть проблема:
У меня есть две функции. Каждый использует другую функцию из того же заголовочного файла. Но когда я хочу использовать функцию «ниже» в функции «выше», у меня возникает ошибка. Я знаю, что случилось, но я не знаю, как это исправить. Мой код:
main.cpp:
include <iostream>
#include <cstdlib>
#include <C:\Users\Natch\Documents\CPP\Calc\incls.h>
using namespace std;
//Global vars//Global functions//Main programint main() {
menu(1);
system("pause");
}
Incls.h:
#ifndef INCLS_H_INCLUDED
#define INCLS_H_INCLUDED#endif // INCLS_H_INCLUDED
#include <iostream>
#include <cstdlib>
using namespace std;
//Vars
int a, b, func, sa, ctrl;
long double sum, sqrt;
//Voids
void down(int func) {
if (func < 6) {
cout << "Wprowadz pierwszy skladnik dzialania:" << endl;
cin >> a;
cout << "Wprowadz drugi skladnik dzialania:" << endl;
cin >> b;
switch(func){
case 1:
sum = a+b;
cout << "Wynik wynosi: " << sum << endl;
menu(2);
break;
case 2:
sum = a-b;
cout << "Wynik wynosi: " << sum << endl;
break;
case 3:
sum = a*b;
cout << "Wynik wynosi: " << sum << endl;
break;
case 4:
sum = a/b;
cout << "Wynik wynosi: " << sum << endl;
break;
case 5:
sum = a%b;
cout << "Wynik wynosi: " << sum << endl;
break;
}
}else if (func == 6)
{
cout << "Podaj ilosc liczb do obliczenia sredniej:" << endl;
cin >> sa;
}else if (func == 7)
{
cout << "Podaj liczbe do wyciagniecia pierwiastka:" << endl;
cin >> a;
}else if (func == 8)
{
cout << "Podaj liczbe do wyciagniecia potegi:" << endl;
cin >> a;
}else if (func== 9)
{
system("exit");
}
}
void menu(int ctrl) {
if (ctrl==1){
system("cls");
system("color 06");
cout << "Kalkulator" << endl;
cout << "Wybierz funkcje: " << endl;
cout << "1.Dodawanie" << endl;
cout << "2.Odejmowanie" << endl;
cout << "3.Mnozenie" << endl;
cout << "4.Dzielenie" << endl;
cout << "5.Reszta z dzielenia" << endl;
cout << "6.Srednia arytmetyczna" << endl;
cout << "7.Pierwiastek kwadratowy" << endl;
cout << "8.Potega n^2" << endl;
cout << "9.Wyjscie" << endl;
cout << "Twoj wybor:" << endl;
cin >> func;
down(func);
}else if (ctrl==2){
cout << endl;
cout << endl;
cout << endl;
cout << endl;
menu(1);
}
}
Во-первых, слово, которое вы, вероятно, ищете, это «рекурсия». Возможно, вы захотите быть немного осторожнее, потому что, когда функции постоянно вызывают друг друга во время нормальной работы, как это, вы можете в конечном итоге исчерпать пространство стека. Более подробное объяснение того, что это на самом деле означает, выходит за рамки этого ответа, но вам, вероятно, будет лучше использовать обычный while
цикл вместо рекурсии в этом случае.
Во-вторых, когда вы получаете сообщение об ошибке, сообщите нам, что это такое! Не заставляйте нас догадываться, тем более что нет гарантии, что то, что вы видите, будет такой же ошибкой, как мы видим при запуске вашей программы.
В-третьих, расскажите нам, какую платформу и компилятор вы используете. Я предполагаю, что вы используете Windows, учитывая system("cls")
Но опять же: не заставляйте нас гадать.
Теперь актуальная ошибка. Я получаю это:
test.h: в функции void down (int) ’:
test.h: 30: ошибка: «menu» не было объявлено в этой области
Вам нужен «прототип функции», который описывает интерфейс menu
функция, прежде чем она на самом деле определяется. Просто придерживайся
void menu(int);
выше определения down
и вы обнаружите, что ошибка компиляции исчезла. Будет ли приложение работать так, как задумано, после этого я не знаю, потому что вы не предоставили достаточно информации!
Других решений пока нет …