问题遇到的现象和发生背景
在写基于多态的职工管理系统 其中暂时只有父类Woker,子类Employee。Woker,Employee的有各自的头文件和cpp文件,但是在运行时报错
Worker 未定义基类 “Worker”:“class”类型重定义 无法从“Employee *”转换为“Worker * 等
问题相关代码,请勿粘贴截图
#include"workerManager.h"
WorkerManager::WorkerManager()
{
}
void WorkerManager::Show_Meanu()
{
cout << "********************************************" << endl;
cout << "********* 欢迎使用职工管理系统! **********" << endl;
cout << "************* 0.退出管理程序 *************" << endl;
cout << "************* 1.增加职工信息 *************" << endl;
cout << "************* 2.显示职工信息 *************" << endl;
cout << "************* 3.删除离职职工 *************" << endl;
cout << "************* 4.修改职工信息 *************" << endl;
cout << "************* 5.查找职工信息 *************" << endl;
cout << "************* 6.按照编号排序 *************" << endl;
cout << "************* 7.清空所有文档 *************" << endl;
cout << "********************************************" << endl;
cout << endl;
}
void WorkerManager::ExitSystem()
{
cout << "欢迎下次使用" << endl;
system("pause");
exit(0);
}
WorkerManager::~WorkerManager()
{
}
#pragma once//防止头文件重复包含
#include <iostream>//包含输入输出流头文件
using namespace std;//使用标准命名空间
class WorkerManager
{
public:
//构造函数
WorkerManager();
//展示菜单
void Show_Meanu();
//退出系统
void ExitSystem();
//析构函数
~WorkerManager();
};
class Worker
{
};
#pragma once
#include<iostream>
#include<string>
using namespace std;
//职工抽象基类
class Worker
{
public:
//显示个人信息
virtual void showInfo() = 0;
//获取岗位名称
virtual string getDeptName() = 0;
int m_Id; //职工编号
string m_Name; //职工姓名
int m_DeptId; //职工所在部门名称编号
};
#pragma once
#include<iostream>
using namespace std;
#include "worker.h"
//员工类
class Employee :public Worker
{
public:
//构造函数
Employee(int id, string name, int dId);
//显示个人信息
virtual void showInfo();
//获取职工岗位名称
virtual string getDeptName();
};
#include "employee.h"
Employee::Employee(int id, string name, int dId)
{
this->m_Id = id;
this->m_Name = name;
this->m_DeptId = dId;
}
void Employee::showInfo()
{
cout << "职工编号: " << this->m_Id
<< " \t职工姓名: " << this->m_Name
<< " \t岗位:" << this->getDeptName()
<< " \t岗位职责:完成经理交给的任务" << endl;
}
string Employee::getDeptName()
{
return string("员工");
}
#include<iostream>
using namespace std;
#include"workerManager.h"
#include"worker.h"
#include"employee.h"
int main()
{
Worker* worker = NULL;
worker = new Employee(1, "张三", 1);
worker->showInfor();
//WorkerManager wm;
//int choice = 0;
//while (true)
//{
// wm.Show_Meanu();
// wm.ExitSystem();
// cout << "请输入您的选择" << endl;
// cin >> choice;
// switch (choice)
// {
// case 0://退出系统
// break;
// case 1://增加职工
// break;
// case 2://显示职工
// break;
// case 3://删除职工
// break;
// case 4://修改职工
// break;
// case 5://查找职工
// break;
// case 6://排序职工
// break;
// case 7://清空文档
// break;
// default:
// system("cls");
// break;
// }
//}
system("pause");
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
个人认为是继承这一块出了问题 语法上好像没有错误 应该是因为写成了头文件,例如
class Employee :public Worker
写在了Employee.h里 而不是像之前初学继承时那样将父类和子类写在同一个文件里。
我想要达到的结果
让程序运行起来