[解決済み] C++の識別子が未定義である
2022-03-12 06:17:25
質問
C++の初心者ですが、なぜこのエラーが出るのか理解できません。似たような5つのステートメントのうち、3つはエラーをマークしますが、他の2つは大丈夫です。エラーはmain関数にあります。
#include <iostream>
using namespace std;
// Function declaration
void getGallons(int wall);
void getHours(int gallons);
void getCostpaint(int gallons, int pricePaint);
void getLaborcharges(int hours);
void getTotalcost(int costPaint, int laborCharges);
// Function definition
void getGallons(int wall)
{
int gallons;
gallons = wall / 112;
cout << "Number of gallons of paint required: " << gallons << endl;
}
// Function definition
void getHours(int gallons)
{
int hours;
hours = gallons * 8;
cout << "Hours of labor required: " << hours << endl;
}
// Function definition
void getCostpaint(int gallons, int pricePaint)
{
int costPaint;
costPaint = gallons * pricePaint;
cout << "The cost of paint: " << costPaint << endl;
}
// Function definition
void getLaborcharges(int hours)
{
int laborCharges;
laborCharges = hours * 35;
cout << "The labor charge: " << laborCharges << endl;
}
// Funtion definition
void getTotalcost(int costPaint, int laborCharges)
{
int totalCost;
totalCost = costPaint + laborCharges;
cout << "The total cost of the job: " << totalCost << endl;
}
// The main method
int main()
{
int wall;
int pricePaint;
cout << "Enter square feet of wall: ";
cin >> wall;
cout << "Enter price of paint per gallon: ";
cin >> pricePaint;
getGallons(wall);
getHours(gallons); // error here
getCostpaint(gallons, pricePaint);
getLaborcharges(hours); // error here
getTotalcost(costPaint, laborCharges); //error here
return 0;
}
このレッスンでは、関数の使用とコード内のパラメータの受け渡しに焦点を当てました。グローバル変数を使ってはいけないんだ。もし、もっといい方法があったら教えてください。
どうやって解決するの?
3行に減らす(他のエラーも同様です)。
int wall;
getGallons(wall);
getHours(gallons); // error here
一方
wall
が定義されています。
gallons
はありません。また、どこで
gallons
ということです。結果は別の関数の奥深くに隠されています。そこからどうやって取り出すんだ?
さて、戻り値が必要ですね。
int getGallons(int wall)
//^^^ !
{
int gallons = wall / 112;
// ...
return gallons; // !
}
そうすると、こんな風に関数を使うことができます。
int gallons = getGallons(wall);
// now gallons is defined and you can use it:
getHours(gallons);
他の関数や変数についても同様です。
通常は
ない
ロジック(計算)とアウトプットを混在させるのは良いアイデアだと思います。そこで、コンソールへの書き込みを
main
関数を使用します。
int getGallons(int wall) { return wall / 112; }
int getHours(int gallons) { return gallons * 8; }
int wall;
std::cin >> wall;
int gallons = getGallons(int wall);
std::cout << ...;
int hours = getHours(gallons);
std::cout << ...;
お気づきですか?今、すべての入出力は同じレベルにあるのです...。
余談:関数を定義する前に使用しないのであれば、関数を定義する前に宣言する必要はありません。
//void f(); // CAN be ommitted
void f() { };
void g() { f(); }
反例です。
void f();
void g() { f(); } // now using f before it is defined, thus you NEED do declare it
void f() { };
それでも宣言を残すかどうかは、むしろスタイルの問題です(ただし、異なるコンパイル単位でコードを管理する場合には、ヘッダーファイルに宣言を記述することになるので重要になります - 次のレッスンですぐに遭遇することになるでしょう)。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] "お知らせ 未定義変数"、"Notice: Notice: 未定義のインデックス", "Notice:未定義のインデックス", "Notice."。PHPを使用した「未定義のオフセット
-
[解決済み] 未定義の動作とシーケンスポイント
-
[解決済み] nullはなぜオブジェクトなのか、nullとundefinedの違いは何ですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?