如何调试"C++ Function does not take 0 arguments"错误?
How to debug "C++ Function does not take 0 arguments" error?
在我的C++编程课上,我的任务是为5名员工创建一个工资记录器。其中一个要求是没有全局变量,因此我认为这需要我在每个单独的函数中本地声明变量并传递它们。
我知道错误意味着什么,但我不知道如何实施解决方案。我什至不确定按引用传递/按值传递是否对参数有意义,我无法编译,因为关于 doComputings()、displayPayrollSummaryResults() 和 displayEmployeeResults() 的 3 个错误在 main() 中有 0 个参数。这是我拥有的doComputings()。
在这之前还有另一个函数叫做getInput,我在其中获取empID,payrollType的用户输入。并将它们放入工资单阵列中。数组的其余部分用于存储来自此函数的计算数据。之后还有几个函数来显示结果(最后请参阅完整代码)。
void doCalculations(
double payrollArray[12][5],
int &empID,
char &payrollType,
double &hoursWorked,
double &payRate,
int &unionCode
)
{
// Defeind Variables - Calculations
int totalEmployee;
double totalGrossPay;
double totalNetPay;
double highestGrossPay;
double lowestGrossPay;
double idHighestGrossPay;
double idLowestGrossPay;
double averageGrossPay;
double averageNetPay;
// - Pay Calucations
double regularPay;
double overtimePay;
double grossPay;
// - Tax Calculations
double stateTax;
double federalTax;
double totalTax;
// - Union Dues
double unionDues;
// - Net Pay
double netPay;
//Pay Calucations - Work more than 40 hours
if( hoursWorked > 40 ){
regularPay = payRate * 40;
overtimePay = ( 1.5 * payRate ) * ( hoursWorked - 40 );
grossPay = regularPay + overtimePay;
}
//Pay Calucations - Work less than 40 hours
else{
regularPay = payRate * hoursWorked;
overtimePay = 0;
grossPay = regularPay;
}
//Put pay calcuations into array
payrollArray[4][totalEmployee] = regularPay;
payrollArray[5][totalEmployee] = overtimePay;
payrollArray[6][totalEmployee] = grossPay;
//Taxes Calculations
// State Tax Calculations
if( grossPay < 500)
stateTax = 0;
else if ( grossPay >= 500 && grossPay <= 1000 )
stateTax = grossPay * 0.03;
else if ( grossPay > 1000)
stateTax = grossPay * 0.05;
// Federal Tax Calculations
if( grossPay < 500)
federalTax = 0;
else if ( grossPay >= 500 && grossPay <= 1000 )
federalTax = grossPay * 0.05;
else if ( grossPay > 1000)
federalTax = grossPay * 0.07;
totalTax = stateTax + federalTax;
// Put Taxes into array
payrollArray[7][totalEmployee] = stateTax;
payrollArray[8][totalEmployee] = federalTax;
payrollArray[9][totalEmployee] = totalTax;
// Define Variables - Union dues
if (unionCode = 1)
unionDues = 15.00;
else if (unionCode = 2)
unionDues = 25.00;
else if (unionCode = 3)
unionDues = 35.00;
// Net Pay Calculation
netPay = grossPay - totalTax - unionDues;
// Put unionDues & netPay into array
payrollArray[10][totalEmployee] = unionDues;
payrollArray[11][totalEmployee] = netPay;
// Add 1 to totalEmployee per calculation
totalEmployee += 1;
// Perpetual Summary Data Calculation
// Total Gross Pay (Category 6)
for ( int i = 0; i < totalEmployee; ++i)
totalGrossPay += payrollArray[6][i];
// Total Net Pay (Category 11)
for ( int i = 0; i < totalEmployee; ++i)
totalNetPay += payrollArray[11][i];
// Find Employee ID number of highest gross pay
// Compare and Find higest gross pay
highestGrossPay = 0; // assume highest gross pay is 0 for now
for (int grossPay = 0; grossPay < totalEmployee; ++grossPay)
{
if ( payrollArray[6][grossPay] > highestGrossPay )
highestGrossPay = payrollArray[6][grossPay]; // new highestGrossPay, gross pay field is at 6.
}
// Using highest gross pay to find corresponding employee ID
for (int id = 0; id < totalEmployee; ++ id)
{
if ( payrollArray[6][id] == highestGrossPay)
idHighestGrossPay = payrollArray[0][id]; // the empID field is at 0,
}
// Find Employee ID number of lowest gross pay
// Compare and Find lowest gross pay
lowestGrossPay = 3150; // assume lowest gross pay is maximum of 3150 for now
for (int grossPay = 0; grossPay < totalEmployee; ++grossPay)
{
if ( payrollArray[6][grossPay] < lowestGrossPay )
lowestGrossPay = payrollArray[6][grossPay]; // new lowestGrossPay, gross pay field is at 6.
}
// Using highest gross pay to find corresponding employee ID
for (int id = 0; id < totalEmployee; ++ id)
{
if ( payrollArray[6][id] == lowestGrossPay)
idLowestGrossPay = payrollArray[0][id]; // the empID field is at 0,
}
// Average Gross Pay
averageGrossPay = totalGrossPay / totalEmployee;
// Average Net Pay
averageNetPay = totalNetPay / totalEmployee;
}
在main()如何处理newPayroll.doComputings("放在这里什么?"),我只是通过反复试验(double payrollArray[12][5],int &empID....),没有完全保留C++课的构造函数或函数原型,也许我缺少一些代码块?
int main()
{
// Introduction Message
cout << "WELCOME - EMPLOYEE PAYROLL RECORDER" << endl;
cout << endl;
Payroll newPayroll;
int employeeLimit = 0; // Employee limit counter
char addEmployee = 'y';// Initial Yes on Add Employee
do{
newPayroll.getInput();
newPayroll.doCalculations();
cout << "Would you want to continue adding employees? Enter [Y] or [y] for Yes." << endl;
cout << "Otherwise Press Any Other Character to Stop adding more Records" << endl;
cin >> addEmployee;
++employeeLimit;
}while((addEmployee == 'y' || addEmployee == 'Y') && employeeLimit < 5);
cout << endl; // blank line separator
newPayroll.displayEmployeeResults();
cout << endl; // blank line separator
newPayroll.displayPayrollSummaryResults();
cout << endl; // blank line separator
system("PAUSE");
return 0;
}
以下是该程序的完整代码:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// Payroll class definition
class Payroll
{
public:
/* getInput(), Function to accept and validates data, stores valid input data in arrays */
void getInput()
{
int empID;
char payrollType;
double hoursWorked;
double payRate;
int unionCode;
int totalEmployee;
double payrollArray[12][5]; // Initialize a 12 rows 5 coloums array for storing payroll data.
char payrollTypeArray[1][5]; // Initialize a separate array for storing payrollType char data.
cout << "Please Enter Employee ID: " << endl;
cin >> empID;
while( empID < 100 || empID > 800 ){
cout << "The Employee ID Entered is Invalid, Please Enter Employee ID (100 - 800): " << endl;
cin >> empID;
}
//put employee id into array
payrollArray[0][totalEmployee] = empID;
cout << "Please Enter payroll type: " << endl;
cin >> payrollType;
while( payrollType != 'H' && payrollType != 'h' ){
cout << "The Payroll Type Entered is Invalid, Please Enter Payroll Type (H or h): " << endl;
cin >> payrollType;
}
//put payrollType into array
payrollTypeArray[1][totalEmployee] = payrollType;
cout << "Please Enter Hours Worked: " << endl;
cin >> hoursWorked;
while( hoursWorked < 0 || hoursWorked > 60.0 ){
cout << "The Hours Worked Entered is Invalid, Please Enter Hours Worked (0 - 60): " << endl;
cin >> hoursWorked;
}
//put hoursWorked into array
payrollArray[2][totalEmployee] = hoursWorked;
cout << "Please Enter Pay Rate: " << endl;
cin >> payRate;
while( payRate < 8.50 || payRate > 45.00 ){
cout << "The Hourly Pay Rate Entered is Invalid, Please Enter Pay Rate (8.50 - 45.00): " << endl;
cin >> payRate;
}
//put payRate into array
payrollArray[3][totalEmployee] = payRate;
cout << "Please Enter Union Code: " << endl;
cin >> unionCode;
while( unionCode !=1 && unionCode !=2 && unionCode !=3 ){
cout << "The Union Code Entered is Invalid, Please Enter Union Code (1, 2 or 3): " << endl;
cin >> unionCode;
}
}
/* doCalculations(), performs calculations using data sotred in input arrays, store
calculation results in arrays, and accumulates totals */
void doCalculations(
double payrollArray[12][5],
int &empID,
char &payrollType,
double &hoursWorked,
double &payRate,
int &unionCode
)
{
// Defeind Variables - Calculations
int totalEmployee;
double totalGrossPay;
double totalNetPay;
double highestGrossPay;
double lowestGrossPay;
double idHighestGrossPay;
double idLowestGrossPay;
double averageGrossPay;
double averageNetPay;
// - Pay Calucations
double regularPay;
double overtimePay;
double grossPay;
// - Tax Calculations
double stateTax;
double federalTax;
double totalTax;
// - Union Dues
double unionDues;
// - Net Pay
double netPay;
//Pay Calucations - Work more than 40 hours
if( hoursWorked > 40 ){
regularPay = payRate * 40;
overtimePay = ( 1.5 * payRate ) * ( hoursWorked - 40 );
grossPay = regularPay + overtimePay;
}
//Pay Calucations - Work less than 40 hours
else{
regularPay = payRate * hoursWorked;
overtimePay = 0;
grossPay = regularPay;
}
//Put pay calcuations into array
payrollArray[4][totalEmployee] = regularPay;
payrollArray[5][totalEmployee] = overtimePay;
payrollArray[6][totalEmployee] = grossPay;
//Taxes Calculations
// State Tax Calculations
if( grossPay < 500)
stateTax = 0;
else if ( grossPay >= 500 && grossPay <= 1000 )
stateTax = grossPay * 0.03;
else if ( grossPay > 1000)
stateTax = grossPay * 0.05;
// Federal Tax Calculations
if( grossPay < 500)
federalTax = 0;
else if ( grossPay >= 500 && grossPay <= 1000 )
federalTax = grossPay * 0.05;
else if ( grossPay > 1000)
federalTax = grossPay * 0.07;
totalTax = stateTax + federalTax;
// Put Taxes into array
payrollArray[7][totalEmployee] = stateTax;
payrollArray[8][totalEmployee] = federalTax;
payrollArray[9][totalEmployee] = totalTax;
// Define Variables - Union dues
if (unionCode = 1)
unionDues = 15.00;
else if (unionCode = 2)
unionDues = 25.00;
else if (unionCode = 3)
unionDues = 35.00;
// Net Pay Calculation
netPay = grossPay - totalTax - unionDues;
// Put unionDues & netPay into array
payrollArray[10][totalEmployee] = unionDues;
payrollArray[11][totalEmployee] = netPay;
// Add 1 to totalEmployee per calculation
totalEmployee += 1;
// Perpetual Summary Data Calculation
// Total Gross Pay (Category 6)
for ( int i = 0; i < totalEmployee; ++i)
totalGrossPay += payrollArray[6][i];
// Total Net Pay (Category 11)
for ( int i = 0; i < totalEmployee; ++i)
totalNetPay += payrollArray[11][i];
// Find Employee ID number of highest gross pay
// Compare and Find higest gross pay
highestGrossPay = 0; // assume highest gross pay is 0 for now
for (int grossPay = 0; grossPay < totalEmployee; ++grossPay)
{
if ( payrollArray[6][grossPay] > highestGrossPay )
highestGrossPay = payrollArray[6][grossPay]; // new highestGrossPay, gross pay field is at 6.
}
// Using highest gross pay to find corresponding employee ID
for (int id = 0; id < totalEmployee; ++ id)
{
if ( payrollArray[6][id] == highestGrossPay)
idHighestGrossPay = payrollArray[0][id]; // the empID field is at 0,
}
// Find Employee ID number of lowest gross pay
// Compare and Find lowest gross pay
lowestGrossPay = 3150; // assume lowest gross pay is maximum of 3150 for now
for (int grossPay = 0; grossPay < totalEmployee; ++grossPay)
{
if ( payrollArray[6][grossPay] < lowestGrossPay )
lowestGrossPay = payrollArray[6][grossPay]; // new lowestGrossPay, gross pay field is at 6.
}
// Using highest gross pay to find corresponding employee ID
for (int id = 0; id < totalEmployee; ++ id)
{
if ( payrollArray[6][id] == lowestGrossPay)
idLowestGrossPay = payrollArray[0][id]; // the empID field is at 0,
}
// Average Gross Pay
averageGrossPay = totalGrossPay / totalEmployee;
// Average Net Pay
averageNetPay = totalNetPay / totalEmployee;
}
/* displayEmployeeResults(), displays employee IDs and calculations results that are stored in arrays.*/
void displayEmployeeResults(
double payrollArray[12][5],
char payrollTypeArray[1][5],
int &totalEmployee
)
{
int employeeCount;
int arrayDataSetw = 5;
int arrayTitleSetw = 12;
//Display Data Array
cout << setw(50) <<"Individual Employee Payroll Record" << endl;
cout << endl;
// Employee ID title
cout << setw(arrayTitleSetw) << "Employee ID";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << payrollArray[0][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Payroll Type title
cout << setw(arrayTitleSetw) << "Payroll Type";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << payrollTypeArray[1][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Hours Worked title
cout << setw(arrayTitleSetw) << "Hours Worked";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << payrollArray[2][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Pay Rate title
cout << setw(arrayTitleSetw) << "Pay Rate";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[3][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Regular Pay title
cout << setw(arrayTitleSetw) << "Regular Pay";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[4][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Overtime Pay title
cout << setw(arrayTitleSetw) << "Overtime Pay";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[5][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Gross Pay title
cout << setw(arrayTitleSetw) << "Gross Pay";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[6][employeeCount] << setw(arrayDataSetw);
cout << endl;
// State Tax title
cout << setw(arrayTitleSetw) << "State Tax";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[7][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Federal Tax title
cout << setw(arrayTitleSetw) << "Federal Tax";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[8][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Total Tax title
cout << setw(arrayTitleSetw) << "Total Tax";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[9][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Union Dues title
cout << setw(arrayTitleSetw) << "Union Dues";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[10][employeeCount] << setw(arrayDataSetw);
cout << endl;
// Net Pay title
cout << setw(arrayTitleSetw) << "Net Pay";
for (employeeCount = 0; employeeCount < totalEmployee; ++employeeCount)
cout << setw(arrayDataSetw) << "$" << payrollArray[11][employeeCount] << setw(arrayDataSetw);
cout << endl;
}
/* displayPayrollSummaryResults(), displays summary totals and averages */
void displayPayrollSummaryResults(
int &totalEmployee,
double &totalGrossPay,
double &totalNetPay,
double &idHighestGrossPay,
double &highestGrossPay,
double &idLowestGrossPay,
double &lowestGrossPay,
double &averageGrossPay,
double &averageNetPay
)
{
int summaryDataSetw = 47;
// Display Summary Data
cout << setw(50) <<"Employee Payroll Summary" << endl;
cout << endl;
cout << setw(summaryDataSetw) << "Total Number of Employees on record is: " << totalEmployee << endl;
cout << setw(summaryDataSetw) << "Total Gross Pay is: $" << totalGrossPay << endl;
cout << setw(summaryDataSetw) << "Total Net Pay is: $" << totalNetPay << endl;
cout << setw(summaryDataSetw) << "Employee with the highest gross pay: Employee #" << idHighestGrossPay << " earned $" << highestGrossPay << endl;
cout << setw(summaryDataSetw) << "Employee with the lowest gross pay: Employee #" << idLowestGrossPay << " earned $" << lowestGrossPay << endl;
cout << setw(summaryDataSetw) << "Average gross pay is: $" << averageGrossPay << endl;
cout << setw(summaryDataSetw) << "Average net pay is: $" << averageNetPay << endl;
}
};
int main()
{
// Introduction Message
cout << "WELCOME - EMPLOYEE PAYROLL RECORDER" << endl;
cout << endl;
Payroll newPayroll;
int employeeLimit = 0; // Employee limit counter
char addEmployee = 'y';// Initial Yes on Add Employee
do{
newPayroll.getInput();
newPayroll.doCalculations();
cout << "Would you want to continue adding employees? Enter [Y] or [y] for Yes." << endl;
cout << "Otherwise Press Any Other Character to Stop adding more Records" << endl;
cin >> addEmployee;
++employeeLimit;
}while((addEmployee == 'y' || addEmployee == 'Y') && employeeLimit < 5);
cout << endl; // blank line separator
newPayroll.displayEmployeeResults();
cout << endl; // blank line separator
newPayroll.displayPayrollSummaryResults();
cout << endl; // blank line separator
system("PAUSE");
return 0;
}
这是因为函数调用参数与函数定义不匹配。例如:
void doCalculations(
double payrollArray[12][5],
int &empID,
char &payrollType,
double &hoursWorked,
double &payRate,
int &unionCode
)
是您的定义,有 6 个参数。您需要参数来调用此函数。但相反,你用 0 参数调用它
newPayroll.doCalculations();
您的displayEmployeeResults
还需要 3 个参数:
void displayEmployeeResults(
double payrollArray[12][5],
char payrollTypeArray[1][5],
int &totalEmployee
)
在世界上几乎所有的编程语言中,当一个函数需要参数时,每次要调用它时都需要编写它们。
通俗地说,当一个函数看起来像这样时 -> hello(int t)
<- 当你想调用它时,你使用 -> hello([number here])
<-。
我一直把这想象成你去一家商店,你要求买东西。
想象:
你去找一个铁匠铺,让他给你做一把铁剑。
这是要求: makeIronSword(int lenght, int money, bool handle)
这就是你对他说的:makeIronSword(5, 250, true);
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 赛通"Cannot take address of memoryview slice"
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- QGraphicsItems not showing up QGraphicsScene
- 如何调试"C++ Function does not take 0 arguments"错误?
- "Error: function does not take 4 arguments"但它确实如此