-1

再発する2つの関数を同時に使用したいのですが、問題があります。

私には2つの機能があります。それぞれが同じヘッダーファイルの他の関数を使用します。しかし、上記の関数で以下の関数を使用したい場合、エラーが発生します。何が起こったのかはわかっていますが、修正方法がわかりません。私のコード:

Main.cpp:

include <iostream>
#include <cstdlib>
#include <C:\Users\Natch\Documents\CPP\Calc\incls.h>
using namespace std;

//Global vars



//Global functions




//Main program


int 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);
}
}
4

1 に答える 1

1

まず、あなたがおそらく探している言葉は「再帰」です。このような通常の操作中に関数が繰り返し相互に呼び出すことにより、最終的にスタックスペースが不足する可能性があるため、ここでは少し注意が必要な場合があります。whileこれが実際に何を意味するかについてのより詳細な説明は、この回答の範囲外ですが、この場合、再帰の代わりに従来のループを使用する方がおそらく良いでしょう。

次に、エラーが発生した場合は、それが何であるかを教えてください。特に、プログラムを実行したときに表示されるエラーと同じエラーが表示される保証はないため、推測しないでください。

第三に、使用しているプラ​​ットフォームとコンパイラを教えてください。与えられたように、私はあなたがウィンドウを使用していると仮定していますsystem("cls")が、繰り返しますが、私たちに推測させないでください。

さて、実際のエラー。私はこれを手に入れます:

test.h:関数'void down(int)':test.h:30:エラー:'menu'はこのスコープで宣言されていません

必要なのは、menu実際に定義される前に関数のインターフェースを記述する「関数プロトタイプ」です。固執するだけ

void menu(int);

の定義の上にあるdownと、コンパイルエラーがなくなることがわかります。その後、アプリケーションが意図したとおりに実行されるかどうかはわかりません。十分な情報が提供されていないためです。

于 2012-12-02T10:01:13.020 に答える