试图将对象添加到矢量并显示结果,但出现seg错误是无效的



我正试图将添加在堆上的对象添加到向量中,但似乎无法让它们添加、计算和显示结果。当我显示结果时,我遇到了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++)

最新更新