C++问题,Employee的构造函数报错,应该如何改

设计基类Person和职员类Employee
1、设计一个基类Person
(1) 保护成员变量包括Name(姓名),Sex(性别),ID(身份证号码)等成员变量。
(2) 公有成员包括:
 构造函数包括缺省构造函数和三参数构造函数,缺省构造函数下将Name设为“X~~”, Sex设为'm'(m表示男性,f表示女性),ID设为18个’0’;
 三参数构造函数按照实际的值对成员变量初始化,在构造函数内对身份证号码进行校验,校验规则;(a)身份证号码长度为18位,不符合要求显示非法,退出程序(b)根据身份证号码的第7位到14位提取出日期,合法年份介于19192021区间,合法月份介于112区间,合法日子介于1~31区间,若不满足上述条件,显示非法身份证号码,退出程序;
 Birth_Date函数,根据人的身份证号码计算并显示其出生日期。身份证号码共18位,其中第7位至第10位为出生年份,第11位至第12位为出生月份,第13位至第14位为出生日;
 show_person()函数用来显示Name(姓名),Sex(性别),ID(身份证号码),出生日期的内容。
 析构函数,显示输出格式“姓名为X,性别为X的人注销,”
2、设计一个职员类Employee,由Person基类公有继承而来
(1) 新增的私有成员变量包括Employee_No(职员编号),Department(所在部门),AbsentDays(缺勤天数),Manager(所在部门经理,为Person类的内嵌对象)
(2) 公有成员包括:
 构造函数,用于对基类成员及派生类成员初始化;
 出勤奖计算函数Award,奖励规则如下:(1)缺勤天数为0的,奖励800元(2)缺勤天数在1-2天内的,奖励金额为800-(缺勤天数100)(3)缺勤天数大于等于3天的,罚款=缺勤天数100;
 show_Employee()函数,用来显示职员的全部信息。
 析构函数,显示输出格式“职员编号为X,姓名为X的职员注销,”
3、主函数里面定义2个Person类(基类)和1个Employee类(派生类)的对象,显示他们的相关信息。

问题相关代码,请勿粘贴截图
#include <iostream>
#include<string>
#include<stdlib.h>
using namespace std;
class Person {
protected:
    string Name;
    string Sex;
    string ID;
public:
    void print() {
        cout << Name;
    }
    Person():Name("XXX"),Sex("m"),ID("00000000000000000") {}
    Person(string n, string s, string i) {
        Name = n;
        Sex = s;
        ID = i;
        if (i.size() != 18) {
            abort();
        }
        string i1 = i.substr(7, 4);
        string i2 = i.substr(11, 2);
        string i3 = i.substr(13, 2);
        if ((i1.compare("1919") == -1) || (i1.compare("2021") == 1)) {
            cout << i;
            abort();
        }
        if ((i2.compare("1") == -1) || (i2.compare("12") == 1)) {
            cout << i;
            abort;
        }
        if ((i3.compare("1") == -1) || (i3.compare("31") == 1)) {
            cout << i;
            abort();
        }
    }
    void Birth_Date() {
        string i1 = ID.substr(7, 4);
        string i2 = ID.substr(11, 2);
        string i3 = ID.substr(13, 2);
        cout << i1 << "-" << i2 << "-" << i3 << endl;
    }
    void show_person() {
        string i1 = ID.substr(7, 4);
        string i2 = ID.substr(11, 2);
        string i3 = ID.substr(13, 2);
        cout << Name << endl << Sex << endl << ID << endl << i1 << "-" << i2 << "-" << i3 << endl;
    }
    ~Person() {
        cout << "姓名为" << Name << ",性别为" << Sex << "的人注销" << endl;
    }
};
class Employee : public Person {
private:
    string Employee_No;
    string Department;
    int AbsentDays;
    Person Manager;
public:
    Employee(string n, string s, string i, string n1,string s1,string i1,string e,string d, int a) :Person(n, s, i),Manager(n1,s1,i1){
        Employee_No = e;
        Department = d;
        AbsentDays = a;
    }
    int Award() {
        if (AbsentDays == 0) {
            return 800;
        }
        else if ((AbsentDays >= 1) && (AbsentDays <= 2)) {
            return (800 - AbsentDays * 100);
        }
        else if (AbsentDays >= 3) {
            return -AbsentDays * 100;
        }
    }
    void show_Employee() {
        string i1 = ID.substr(7, 4);
        string i2 = ID.substr(11, 2);
        string i3 = ID.substr(13, 2);
        cout << Name << endl << Sex << endl << ID << endl << i1 << "-" << i2 << "-" << i3 << endl;
        cout << Employee_No << endl << Department << endl << AbsentDays << endl;
        Manager.print();
    }
    ~Employee() {
        cout << "职员编号为" << Employee_No << ",姓名为" << Name << "的职员注销";
    }
};

运行结果及报错内容 严重性 代码 说明 项目 文件 行 禁止显示状态

错误 C2664 “Person::Person(const Person &)”: 无法将参数 1 从“std::string”转换为“const Person &” C:\Users\Lenovo\source\repos\ConsoleApplication 61

我的解答思路和尝试过的方法
我想要达到的结果

img


这个是什么意思