1. ホーム
  2. c++

[解決済み] このスコープでは 'pow' は宣言されていません。

2022-02-11 17:14:12

質問

#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

なぜこのエラーが発生したのか、どなたか説明してください。

解決方法を教えてください。

C++コンパイラは、コードファイルを順番に解析します。例えば、1行目、2行目、3行目...といった具合です。そのため、コンパイラが関数呼び出し文に到達するころには pow(e, b); の中で main() 関数の定義に到達していません。 void pow(int e, int b) の下にある main() 関数を使用するため、エラーが発生します。これを解決する方法は2つあります。

1) void pow(int e, int b) (から呼び出す予定の他の関数も含む)。 main() の上にある main() 関数そのものを使用します。こうすることで、コンパイラはあなたの関数が pow(e, b); の行は main() .

2) もう一つの方法は、前方宣言を使用する方法です。これは、次の行を追加することを意味します。 void pow(int e, int b); の前に main() 関数を使用します。これはコンパイラに、前方宣言で与えられた関数(この場合は void pow(int e, int b) ) は、このコードファイル内で定義されていますが、ファイル内の関数の定義コードの前に呼び出される可能性があります。この方法は、ファイル内で複数の関数が異なる順番で呼び出される可能性があり、ファイル内で呼び出される前に表示されるように定義を並べ替えることが容易でないため、より良い方法と言えます。以下は、その良い例です。 前方宣言

また、正しい結果を得るために、関数に参照でパラメータを渡すこともできます。 void pow(int& e, int& b) . これによって pow() 関数は、実際に整数に適用されます。 eb の後、捨てられてしまうコピーにだけでなく pow() が実行されます。これは リンク 関数の引数の参照渡しについては、かなり良い説明になっています。