为什么这个c++代码输出错误呢

以下是题目:

  1. 定义一个雇员类Employee,包含char型数组成员变量m_cName(姓名)和m_cNo(编号),int型成员变量m_nDepartment(部门号),成员函数SetName(char *pcName)、SetNo(char *pcNo)和SetDept(int nDept)分别用来设置姓名、编号和部门号,Display()函数用来输出雇员的信息,还包含一个构造函数Employee(char *pcName, char *pcNo, int nDept)。定义一个经理类Manager,派生于雇员类Employee,新增成员变量m_nLevel表示级别和成员函数SetLvl(int nLvl)用来设置m_nLevel,重定义Display()用来输出经理的信息。
    要求:
    (1)Manager类的成员函数可以直接访问Employee类中的成员变量,但类的外部不能直接访问。
    (2)在主函数中分别创建一个雇员类对象和一个经理类对象,并输出对象的信息。

以下为我的代码:

#include<iostream>
#include<cstring>
#pragma warning(disable : 4996)
//_CRT_SECURE_NO_WARNINGS;
using namespace std;
class Employee {
    //friend void Manager::display();
protected:
    char m_cName[10], m_cNo[10];
    int m_nDepartment;
public:
    /*Employee() :m_cName("0"), m_cNo("0"), m_nDepartment(0) {}*/
    /*Employee() {
        memset(m_cName, 0, sizeof(m_cName));
        memset(m_cNo, 0, sizeof(m_cNo));
        m_nDepartment = 0;
    }*/
    Employee(const char* p_cName = "", const char* p_cNo = "", const int nDept = 0) {
        strcpy(m_cName, p_cName);
        strcpy(m_cNo, p_cNo);
        m_nDepartment = nDept;
    }

    Employee(char* p_cName, char* p_cNo, int nDept) {
        strcpy(m_cName, p_cName);
        strcpy(m_cNo, p_cNo);
        m_nDepartment = nDept;
    }
    void setname(char* p_cName) {
        for (int i = 0; i < 10; i++) {
            m_cName[i] = *(p_cName + i);
        }
    }
    void setno(char* p_cNo) {
        for (int i = 0; i < 10; i++) {
            m_cNo[i] = *(p_cNo + i);
        }
    }
    void setdept(int nDept) {
        m_nDepartment = nDept;
    }
    void display() {
        cout << "姓名为" << m_cName << endl;
        cout << "编号为" << m_cNo << endl;
        cout << "部门号为" << m_nDepartment << endl;
    }
};
class Manager :public Employee {
private:
    int m_Level;
public:
    Manager(char* p_cName, char* p_cNo, int nDept, int p_level) : Employee(p_cName, p_cNo, nDept) {
        m_Level = p_level;
        cout << "派生类的构造函数被调用!" << endl;
    }
    void setlevel(int p_Level) {
        m_Level = p_Level;
    }
    void display();
};
void Manager::display() {
    cout << "姓名为" << m_cName << endl;
    cout << "编号为" << m_cNo << endl;
    cout << "部门号为" << m_nDepartment << endl;
    cout << "级别为" << m_Level << endl;
}
int main
() {
    Employee e1;
    char e1_p_cName[10] = "zhangsan", e1_p_cNo[10] = "22020247"; int e1_nDept = 618;
    e1.setname(&e1_p_cName[10]);
    e1.setno(&e1_p_cNo[10]);
    e1.setdept(e1_nDept);
    e1.display();
    /*Employee e2 = Employee("lisi", "22020201", 619);*/
}

以下为我的错误输出:

img


本题应该怎样修正才可以正确输出呢?
以下输出子类manager类对象m1的代码与错误应如何改正呢

img

img

e1.setno(&e1_p_cNo[10]);
->
e1.setno(&e1_p_cNo[0]);