标识符"i"未定义C++

identifier "i" is undefined C++

本文关键字:C++ 未定义 标识符      更新时间:2023-10-16
#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;
}

在线if employee[i].hoursWorked > 40)我收到错误:"错误:标识符"i"未定义。然而,我确保主要定义它。我的代码组织得当吗?如果不是,我应该如何组织它?我有一种感觉,这与我的代码的组织方式有关。

您定义的i是本地的,无法在其他函数中访问。您可以像下面这样更改这些代码。

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;
    }
    ...