2
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    int e=0;
    int b=0;
    cout<<"Enter Exponent";
    cin>>e;
    cout<<"Enter Base";
    cin>>b;
    pow(e, b);
    cout<<"Power:"<<e;
    return 0;
}

void pow(int e, int b)
{
  int t=1;
  while(b==t)
  {
    e=e*b;
    t++;
  }
}

これが私が受け取ったエラーです:

ulaga.cpp|29|error: 'pow' was not declared in this scope

このエラーが発生した理由を説明できる人はいますか?

4

4 に答える 4

8

関数を前方宣言する必要がありpowます。お気に入り -

....
void pow(int e, int b);

int main()
....

ここで間違っていることはほとんどありません。たとえば、e渡しです。そのためe、主に のそれとは異なりpowます。

pow(e, b);
cout<<"Power:"<<e;  // This just prints the value taken from console
                    // And not the calculated power.

pow値を返す関数を作成する (または) 参照渡ししeます。

于 2012-06-13T13:49:36.427 に答える
8

C++ コンパイラは、コード ファイルを順番に解析します。つまり、1行目、2行目、3行目...などです。そのため、コンパイラが関数内の関数呼び出しステートメントpow(e, b);に到達するまでに、関数の下の関数main()の定義にまだ到達していないため、エラーが発生します。これを解決するには 2 つの方法があります。void pow(int e, int b)main()

1) の定義void pow(int e, int b)(および から呼び出す予定の他の関数) を関数自体main()の上に移動します。main()このようにして、コンパイラはすでに解析しており、関数が のpow(e, b);行に到達する前に関数を認識していますmain()

2) もう 1 つの方法は、前方宣言を使用することです。これはvoid pow(int e, int b);、関数の前に行を追加することを意味しmain()ます。これは、前方宣言 (この場合void pow(int e, int b)は ) によって指定された関数がこのコード ファイルで定義されているが、ファイル内の関数の定義コードの前に呼び出される可能性があることをコンパイラに伝えます。ファイル内に複数の関数が異なる順序で相互に呼び出されている可能性があり、それらの定義をファイル内で呼び出される前に表示されるように再配置するのは簡単ではないため、これはより良い方法です。これは、 Forward Declarationに関する良い読み物です。

正しい結果を得るために、参照によってパラメーターを関数に渡すこともできます。すなわち使用void pow(int& e, int& b)。これにより、関数で変更された値が、実行後に破棄されるコピーだけでなく、pow()実際に整数に適用されますe。関数での参照による引数の受け渡しに関するこのリンクは、これを説明するのに非常に適しています。bpow()

于 2012-06-13T14:07:04.000 に答える
3

#include <cmath>これは、コードの最初にインポートするだけで簡単に修正できます。

于 2019-12-12T15:36:11.467 に答える
1

関数powの前方宣言を使用する必要があります。または、その定義をメイン関数の上に移動するだけです。

于 2012-06-13T13:50:09.290 に答える