[解決済み] このスコープでは 'pow' は宣言されていません。
質問
#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()
関数は、実際に整数に適用されます。
e
と
b
の後、捨てられてしまうコピーにだけでなく
pow()
が実行されます。これは
リンク
関数の引数の参照渡しについては、かなり良い説明になっています。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】システムが指定されたファイルを見つけられませんでした。