我正在为“ Programming I”类开发一个项目,但遇到一个奇怪的错误。这是一个计薪程序,可计算税收和不计税,我们的教授希望我们将某些功能放在单独的.cpp
文件中。
我已经对其进行了设置,以便将每个员工都视为一个结构:
#include <string>
using namespace std;
struct Employee {
string firstName;
string lastName;
string name;
double rate;
double hours;
char status;
double grossPay;
double insurance;
double socialSecurity;
double stateTax;
double federalTax;
double PYE;
double netPay;
};
在我的主程序中,我有一个由七个员工组成的数组:“员工”,并从一个单独的文本文件中对其进行初始化,但是当我尝试将该数组传递给单独的.cpp
中的函数之一时,文件,出现此错误:
“ Employee *”类型的参数与“ Employee *”类型的参数不兼容
问题是,尽管这仅发生在三个函数中的前两个函数上,而第三个函数即使在注释掉前两个函数时也可以:
int main() {
const int numEmployees = 7;
Employee employees[numEmployees];
cout << "name" << setw(20) << right << "rate" << setw(8) << "hours" << setw(7) << "ins" << setw(7) << "soc" << setw(7) << "state" << setw(7) << "fed" << setw(7) << "net" << endl
<< setw(46) << "sec" << setw(6) << "tax" << setw(8) << "tax" << endl;
fstream data("employees.txt");
for (int i = 0; i < numEmployees; i++) {
data >> employees[i].firstName >> employees[i].lastName >> employees[i].rate >> employees[i].hours >> employees[i].status;
employees[i].name = employees[i].firstName + " " + employees[i].lastName;
}
computeGrossPay(employees, numEmployees); //<-\
computeInsurance(employees, numEmployees); //<- these two are errors
computeFederalTax(employees, numEmployees); //<-- this one is fine
for (int i = 0; i < numEmployees; i++) {
// compute social security withheld as 7% of gross pay
employees[i].socialSecurity = employees[i].grossPay * 0.07;
// compute state tax as 3% of gross pay
employees[i].stateTax = employees[i].grossPay * 0.03;
// Compute PYE (Projected Yearly earnings) as gross-pay times 52.
employees[i].PYE = employees[i].grossPay * 52;
// Compute Net pay as gross-pay minus insurance minus soc-sec minus state-tax minus fed-tax
employees[i].netPay = employees[i].grossPay - employees[i].insurance - employees[i].socialSecurity - employees[i].stateTax - employees[i].federalTax;
}
printPayroll(employees, numEmployees);
}
以下是每个函数的外观,每个函数都位于各自独立的文件中:
void computeGrossPay(Employee* employees, int numEmployees) {
// do stuff
}
void computeInsurance(Employee* employees, int numEmployees) {
// do stuff
}
void computeFederalTax(Employee* employees, int numEmployees) {
// do stuff
}
我该如何解决?
编辑:我相信这可能是我的IDE的问题。我使用的是Visual Studio,正如其他用户指出的那样,它在其他地方可以正常编译。我认为我会坚持使用基本的文本编辑器,直到准备好使用更高级的IDE。
答案 0 :(得分:-1)
我对这段代码有几点评论。这段代码使用C样式的数组,并将其作为指针和指针大小传递,这是不明智的。而且,它没有使用C ++的一些最基本的概念。
我进行了一些重新排列-大部分都是将Employee变成具有自己的成员函数的真实结构/类,而不是从外部传递它。使用std :: array(比原始数组更可取)制作数组,最后,稍作触摸-将雇员人数设为constexpr
。
我没有安排输入解析,但是实际上,Employee需要是一个 class ,它不允许从外部接触其成员的值,并且应该具有一个构造函数,该构造函数可以获取所有相关的输入,而不是现在要做的事情。
看一下重新排列的代码:
using namespace std; // I strongly suggest against it!!!!
struct Employee {
string firstName;
string lastName;
string name;
double rate;
double hours;
char status;
double grossPay;
double insurance;
double socialSecurity;
double stateTax;
double federalTax;
double PYE;
double netPay;
void computeAll() // a bad name, but I don't have a better idea now!
{
computeGrossPay();
computeInsurance();
computeFederalTax();
computeSocialSecurity();
computeStateTax();
computePYE();
computeNetPay();
}
private:
void computeGrossPay();
void computeInsurance();
void computeFederalTax();
void computeSocialSecurity();
void computeStateTax();
void computePYE();
void computeNetPay();
};
int main() {
constexpr uint64_t NUM_OF_EMPLOYEES = 7;
std::array<Employee, NUM_OF_EMPLOYEES> employees{};
cout << "name" << setw(20) << right << "rate" << setw(8) << "hours" << setw(7) << "ins" << setw(7) << "soc" << setw(7) << "state" << setw(7) << "fed" << setw(7) << "net" << endl
<< setw(46) << "sec" << setw(6) << "tax" << setw(8) << "tax" << endl;
fstream data("employees.txt");
for (auto& employee : employees)
{
data >> employee.firstName >> employee.lastName >> employee.rate >> employee.hours >> employee.status;
employee.name = employee.firstName + " " + employee.lastName;
employee.computeAll();
}
return 0;
}