我正试图将添加在堆上的对象添加到向量中,但似乎无法让它们添加、计算和显示结果。当我显示结果时,我遇到了segmen错误。我希望将对象添加到向量中,然后计算付款并显示结果。我做错了什么导致seg故障?
主文件
#include <cstdlib>
#include <vector>
#include "Employee.h"
using namespace std;
int main(int argc, char** argv) {
vector<Employee *> myVector(4);
Employee *emp1 = new Employee("Joe", 15.0, 45.0);
Employee *emp2 = new Employee("Sally", 25.0, 35.0);
Employee *emp3 = new Employee("Mary", 32.0, 55.0);
Employee *emp4 = new Employee("John", 18.0, 32.0);
myVector.push_back(emp1);
myVector.push_back(emp2);
myVector.push_back(emp3);
myVector.push_back(emp4);
for (int i = 0; i <= myVector.size() - 1; i++)
{
myVector[i]->calculatePay();
myVector[i]->display();
}
return 0;
}
头文件
#include <iostream>
using namespace std;
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
class Employee {
public:
string name;
double payRate;
double hours;
double gross;
Employee * next;
Employee();
Employee(string name, double payRate, double hours);
void display();
void calculatePay();
Employee(const Employee& orig);
virtual ~Employee();
private:
};
#endif /* EMPLOYEE_H */
源文件
#include <iomanip>
#include "Employee.h"
Employee::Employee() {
name = "";
payRate = 0.0;
hours = 0.0;
gross = 0.0;
}
Employee::Employee(string name, double payRate, double hours)
{
this->name = name;
this->payRate = payRate;
this->hours = hours;
}
void Employee::display()
{
cout << setprecision(2) << fixed << endl;
cout << "Name: " << name << endl;
cout << "Pay Rate: " << payRate << endl;
cout << "Hours: " << hours << endl;
cout << "Gross: " << gross << endl;
}
void Employee::calculatePay()
{
if (hours > 40)
{
gross = ((hours - 40) * payRate * 1.5) + (40 * payRate);
}
else
{
gross = hours * payRate;
}
}
Employee::Employee(const Employee& orig) {
}
Employee::~Employee() {
}
向量的声明
vector<Employee *> myVector(4);
正在告诉它分配4个元素。这些元素被初始化为nullptr
。使用push_back()
将在null元素之后添加元素。
之后,在线上
myVector[i]->calculatePay();
则CCD_ 3被取消引用并导致分割故障。
您应该移除向量构造函数的参数以创建空向量。如果你想预先为push_back()
预留空间,你应该使用reserve()
vector<Employee *> myVector;
myVector.reserve(4);
还有环路
for (int i = 0; i <= myVector.size() - 1; i++)
是不错的(在这种情况下,向量不是空的(,但不是以通常的方式。应该是:
for (size_t i = 0; i < myVector.size(); i++)