問題

我是C的新手,我不明白為什麼我收到此錯誤.在類似的3個標記錯誤的5個語句中,其他兩個沒問題.錯誤在主函式中.

     #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;

}
 

這個教訓側重於在程式碼中使用函式和傳遞引數.我不應該使用全域性變數.如果您有更好的方法來做到這一點,請分享.

  最佳答案

減少到三行(其他錯誤類似):

 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);
 

類似於其他函式和變數。

通常,在相同的fucntion中混合邏輯(計算)和輸出是不好的想法.所以我寧願將寫入控制檯轉換為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++variablesparametersundefinedidentifier