[英]c++ pointers with overloaded functions and user input
我收到多個錯誤。我已經嘗試過使用不同的變量和不同的數據類型。 我顯然不明白如何正確使用指針。 我不是在找人給我答案,我想了解更多並在可能的情況下自己弄清楚但是我被卡住了 - 非常感謝任何建議。
我總是很坦率——這是為了學校的作業。 除了在我的 function 中至少使用一個指針示例的要求外,我已經完成並滿足所有其他評分要求。
這里的例子,我試圖在 main 和 case 2 中使用一個帶有雙倍 employeeSalary的指針。 早些時候我試圖將它們與我的 function 原型一起使用,但這似乎也不起作用。 我在 ConsoleApplication5.exe 的 0x00007FFB0897EBCE (msvcp140d.dll) 處拋出異常:0xC0000005:訪問沖突寫入位置 0x0000000000000000。
#include <iostream>
#include <iomanip>
using namespace std;
double grossPay(const int number, double hours, double pay); // hourly function
double grossPay(int number, double salary); // salary function
double grossPay(int company, int project, int number, double hours, double pay); // contract function
double grossPay(int institution, int department, double hours, double pay); // intern function
int main() {
// prompt user for type of employee and give EOF instructions.
cout << "Enter '1' for hourly. Enter '2' for salaried." << endl;
cout << "Enter '3' for contracter. Enter '4' for intern." << endl;
cout << endl;
cout << "Terminate input by using <ctrl> z on Windows then press enter." << endl;
cout << "Terminate input by using <ctrl> z on UNIX / Linux / Mac OS X then press enter." << endl;
int employeeType{ 0 };
int employeeNumber{ 0 };
double overtimePay{ 0 };
// salaried
double *employeeSalary{ 0 };
// hourly
double hoursWorked{ 0 };
double payRate{ 0 };
// contractor
int companyNum{ 0 };
int projectNum{ 0 };
// intern
int schoolCode{ 0 };
int departmentCode{ 0 };
while (cin >> employeeType) {
switch (employeeType) {
case 1:
// HOURLY employee prompts and output
cout << "Enter employee number: " << endl;
cin >> employeeNumber;
cout << "Enter number of hours employee worked: " << endl;
cin >> hoursWorked;
cout << "Enter employees pay rate: " << endl;
cin >> payRate;
while (hoursWorked > 50 || hoursWorked < 0) {
hoursWorked = -1;
cout << "Input invalid, please enter acceptable work hours for hourly employee (0-50):" << "\n" << endl;
cin >> hoursWorked;
}
if (hoursWorked > 0 || hoursWorked < 50) {
cout << setprecision(2) << fixed;
cout << "Gross pay of employee #" << employeeNumber << " is $" << grossPay(employeeNumber, hoursWorked, payRate) << endl;
cout << endl;
}
break;
case 2:
// SALARIED employee prompts and output
cout << "Enter employee number: " << endl;
cin >> employeeNumber;
cout << "Enter employees salary: " << endl;
cin >> *employeeSalary;
cout << setprecision(2) << fixed;
cout << "Gross pay of employee #" << employeeNumber << " is $" << grossPay(employeeNumber, *employeeSalary) << endl;
cout << endl;
break;
case 3:
// CONTRACT employee prompts and output
cout << "Enter company number: " << endl;
cin >> companyNum;
cout << "Enter project number: " << endl;
cin >> projectNum;
cout << "Enter employee number: " << endl;
cin >> employeeNumber;
cout << "Enter number of hours employee worked: " << endl;
cin >> hoursWorked;
cout << "Enter employees pay rate: " << endl;
cin >> payRate;
while (hoursWorked > 40 || hoursWorked < 0) {
hoursWorked = -1;
cout << "Input invalid, please enter acceptable work hours for contract employee (0-40):" << "\n" << endl;
cin >> hoursWorked;
}
if (hoursWorked > 0 || hoursWorked < 40) {
cout << setprecision(2) << fixed;
cout << "Gross pay of contractor #" << employeeNumber << " is $" << grossPay(companyNum, projectNum, employeeNumber, hoursWorked, payRate) << endl;
cout << endl;
}
break;
case 4:
// INTERN prompts and output
cout << "Enter institution code: " << endl;
cin >> schoolCode;
cout << "Enter department code: " << endl;
cin >> departmentCode;
cout << "Enter number of hours employee worked: " << endl;
cin >> hoursWorked;
cout << "Enter employees pay rate: " << endl;
cin >> payRate;
while (hoursWorked > 20 || hoursWorked < 0) {
hoursWorked = -1;
cout << "Input invalid, please enter acceptable work hours for an intern (0-20):" << "\n" << endl;
cin >> hoursWorked;
}
if (hoursWorked > 0 || hoursWorked < 20) {
cout << setprecision(2) << fixed;
cout << "Gross pay of the intern is $" << grossPay(schoolCode, departmentCode, hoursWorked, payRate) << endl;
cout << endl;
}
break;
}
cout << "Enter '1' for hourly. Enter '2' for salaried." << endl;
cout << "Enter '3' for contracter. Enter '4' for intern." << endl;
cout << endl;
}
cout << endl;
cout << "Thank you for using this program. " << endl;
}
// validation in main code
// hourly function
double grossPay(const int number, double hours, double pay) {
double hourlyWeek{ 0 };
if (hours > 40.00) {
hourlyWeek = (pay * 40.00) + ((hours - 40.00) * (pay * 1.50));
}
else {
hourlyWeek = (hours * pay);
}
return hourlyWeek;
}
// salary function
double grossPay(int number, double salary) {
double salaryWeek{ 0 };
salaryWeek = (salary/52.00);
return salaryWeek;
}
//contractor function
double grossPay(int company, int project, int number, double hours, double pay) {
double contractWeek{ 0 };
contractWeek = (hours * pay);
return contractWeek;
}
// intern function
double grossPay(int institution, int department, double hours, double pay) {
double internWeek{ 0 };
if (hours > 15.00) {
internWeek = (pay * 15) + ((hours - 15) * (pay * 1.25));
}
else {
internWeek = (hours * pay);
}
return internWeek;
}
如果將代碼縮減為最簡單的重現錯誤的示例,則會得到:
int main() {
// salaried
double *employeeSalary{ 0 }
*employeeSalary = 1000;
return 0;
}
你有一個指針,你“取消引用”它(也就是說你嘗試使用它指向的東西)。 但它沒有指向任何東西。 您嘗試寫入不屬於您的 memory 空間,並且出現錯誤。 您必須將指針指向某物:
int main() {
// salaried
double salary(0);
double *pSalary = &salary;
*pSalary = 1000;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.