2017-01-31 13 views
-3
ライン if employee[i].hoursWorked > 40)
#include<iostream> 
#include<string> 
#include<iomanip> 

using namespace std; 

struct EmployeeData 
{ 
    string employeeName; 
    float overtime; 
    float grossPay; 
    float hoursWorked; 
    float hourlyRate; 
    float statetaxOwed; 
    float statetaxRate; 
    float fedtaxOwed; 
    float fedtaxRate; 
    float netPay; 
}; 

EmployeeData employee[4]; //array of 4 employees 


int main() 
{ 
for (int i = 0; i < 4; ++i) 
    { 
    cout << "Please enter the Employee's Name: "; 
    cin >> employee[i].employeeName; 
    cout << "Please enter your hours worked: "; 
    cin >> employee[i].hoursWorked; 
    cout << "Please enter your hourly rate: "; 
    cin >> employee[i].hourlyRate; 
    cout << "Please enter the Federal Tax Rate: "; 
    cin >> employee[i].fedtaxRate; 
    cout << "Please enter the State Tax Rate: "; 
    cin >> employee[i].statetaxRate; 
    } 

for (int i = 0; i < 4; ++i) 
    { 
    calculate_stats(employee[i]); 
    } 

} 

void calculate_stats(EmployeeData& employee) 
{ 
    if (employee[i].hoursWorked>40) { 
     employee[i].hoursWorked = ((employee[i].hoursWorked-40) * (1.5)) + 40; 
    } 
    else { 
     employee[i].hoursWorked = employee[i].hoursWorked; 
    } 
    employee[i].grossPay = employee[i].hoursWorked * employee[i].hourlyRate; 
    employee[i].fedtaxOwed = employee[i].grossPay * (employee[i].fedtaxRate/100); 
    employee[i].statetaxOwed = employee[i].grossPay * (employee[i].statetaxRate/100); 
    employee[i].netPay = (employee[i].grossPay - employee[i].fedtaxOwed- employee[i].statetaxOwed); 

    cout << setprecision(2) << showpoint << fixed; 
    cout << "\nThe employee's name is: " << employee[i].employeeName << endl; 
    cout << "The Gross Pay is: $" << employee[i].grossPay << endl; 
    cout << "The Federal Taxes Owed is: $" << employee[i].fedtaxOwed << endl; 
    cout << "The State Taxes Owed is: $" << employee[i].statetaxOwed << endl; 
    cout << "The Net Pay for the Employee is: $" << employee[i].netPay << endl; 
} 

私はエラー受け取る未定義です:。。「ERROR:識別子が 『i』が定義されていないがしかし、私がメインでそれを定義してください行われ、適切に整理私のコードです、それはなら?識別子が「i」はC++

+1

他の場所ではローカルであり、他の機能ではアクセスできません。 – Shiping

+0

変数はoです定義されている範囲内で可視になります。 'i'は' main'の外側には見えません。実際、定義されている 'for'ループの外側には見えません。私はC + +の良い本を得ることをお勧めします:あなたはいくつかの推奨事項[ここ](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を見つけることができます。 –

+0

'calculate_stats'関数は配列ではなく_one_ employeeをとります...その関数から不要な(そして不正確な)' [i] 'を取り除きます – Chad

答えて

0

あなたが定義したものはローカルであり、他の機能ではアクセスできません。これらのコードは次のように変更することができます。

void calculate_stats(EmployeeData&); // put this line before main function. 

... 
for (int i = 0; i < 4; ++i) 
{ 
    calculate_stats(employee[i]); 
} 
... 


void calculate_stats(EmployeeData& employee) 
{ 
    if (employee.hoursWorked>40) { 
     employee.hoursWorked = ((employee.hoursWorked-40) * (1.5)) + 40; 
    } 
    else { 
     employee.hoursWorked = employee.hoursWorked; 
    } 
    ... 
+0

助けてくれてありがとう。それはたくさんのことを意味します。しかし、私は新しいエラーが発生しました...私はその問題を解決したときに新しいエラーを出しました(実行しようとすると発生しますが、それ以外は表示されません)...エラーC3861: '' calculate_stats' ':識別子が見つかりません。 forループのcalculate_statsを参照しています。私は空を呼び出すためにそれを使用し、番号のクランチと印刷をすることを望んでいました。 – Elsa

+0

@Elsa私は私のポストでいくつかの変更を加え、私はそれをテストし、それは働いた。この行を追加する必要があることを忘れた "void calculate_stats(EmployeeData *);"主な機能の前に。 – Shiping

+0

@Elsa申し訳ありません、あなたの前のバージョンをそのまま使用し、この行を変更することができます。calculate_stats(employee + i); 〜calculate_stats(employee [i] i);この行を追加する "void calculate_stats(EmployeeData&);"主な機能の前に。 – Shiping