c++ - 尝试将对象添加到向量并显示结果,但出现段错误但无法正常工作
问题描述
我正在尝试将在堆上添加的对象添加到我的向量中,但我似乎无法让它们添加、计算和显示结果。显示结果时出现段错误。我希望将对象添加到向量中,然后我想计算工资并显示结果。我做错了什么导致段错误?
主文件
#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();
被nullptr
取消引用并导致分段错误。
您应该删除向量构造函数的参数以创建一个空向量。如果你想提前预留空间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++)
推荐阅读
- facebook - FFMPEG- 流媒体在几秒钟后停止
- c# - 如何将 VB 集合从 c# 代码传递给函数?
- sql-server - SQL Server distinct 仅选择最新日期
- grails - Grails在gsp页面中设置一个可以被过滤器找到的变量(之后)
- c# - 在 C# 中使用 WebClient 读取 404 页面的源代码?
- python-3.x - 在 Python3 中将 XML 文件发送到 REST API
- scala - scala - 单元测试 - 如何在类中模拟类方法
- vba - 从 WORD 表 VBA 中获取公式值
- javascript - IE11中的JSON对象描述是否可能
- ios - 我可以将客户端在线支付门户与 iOS 应用程序一起使用吗?