无法在类之间建立同胚性,在新运算符处出现错误



我正在编写一个大学管理系统,总共有十个班。正如我们所知,当我们在基类中使用虚拟函数时,我们在类之间建立了多态性,然后我们从基类继承派生类,并且虚拟函数在派生类中被覆盖,但在这里,我面临着一个从未遇到过的问题,因为我在c++中多次实现了多态性关键字。可以在显示类中看到

//Using Polymorphism
Department* department=new Faculties();

我无法确定这些系和院系之间的多态性。类似地,有一个员工类是从部门派生的,同样的错误也在那里。我非常困惑,因为我仍然是OOP的创建者。部门级

#pragma once
#include"Accounts.h"
#include"Faculties.h"
#include"Employee.h"
#include<iostream>
#include<vector>
using namespace std;
#include<string>
class Department
{
public:
Department()=default;
~Department()=default;
//Declaring the methods

//Setters

void setDepartmentID(int);
void setDepartmentStrength(int);
void setHODName(string);
//Inheriting
virtual void setName(string);
virtual void set_id(int);
virtual void set_address(string);
virtual void setEmail(string);
//Defining getters 
virtual string getName(int);
virtual int get_id(int);
virtual string get_address(int);
virtual string getEmail(int);

//for calculating payments
virtual void set_payments(float, string, float)=0;
virtual void showPaymentDetails(int);
//getters
int getDepartmentStrength();
private:
vector<string> departmentName;
vector<string> departmentHOD;
vector<int> departmentID;
vector<int> departmentStrength;
//Declaring an array to enter the department faculties
};
Department::Department()
{
}
Department::~Department()
{
}
void Department::setDepartmentID(int id)
{
departmentID.push_back(id);
}
void Department::setName(string name)
{
departmentName.push_back(name);
}
void Department::setDepartmentStrength(int strength)
{
departmentStrength.push_back(strength);
}
void Department::setHODName(string name)
{
departmentHOD.push_back(name);
}
int Department::getDepartmentStrength()
{
static int sum = 0;
for (size_t i = 0; i < departmentStrength.size(); i++)
{
sum = sum + departmentStrength[i];
}
return sum;
}

级学院

#pragma once
#include"Accounts.h"
#include"Department.h"
#include<iostream>
#include<string>
#include<vector>
using namespace std;

class Faculties:public Department
{
public:
Faculties()=default;
~Faculties()=default;
//////////////////////////////////Using Polymorphism///////////////////////////////////
//Setters
void setName(string) override;
void set_id(int) override;
void set_address(string) override;
void setEmail(string) override;
void set_payments(float, string, float);
//Getters
string getName(int) override;
int get_id(int) override;
string getEmail(int) override;
string get_address(int) override;
//for showing payments
void showPaymentDetails(int) override;
private:
vector<int> faculty_id;
vector<string> faculty_name;
vector<string> faculty_email;
vector<string> faculty_address;
vector<string> faculty_type;
vector<string> faculty_description;
Accounts accounts;
};
Faculties::Faculties()
{
}
Faculties::~Faculties()
{
}

void Faculties::set_id(int id)
{
this->faculty_id.push_back(id);
}
void Faculties::setEmail(string email)
{
this->faculty_email.push_back(email);
}
void Faculties::setName(string name)
{
this->faculty_name.push_back(name);
}
void Faculties::set_address(string saddress)
{
this->faculty_address.push_back(saddress);
}
string Faculties::getName(int index)
{
return this->faculty_name[index];
}
int Faculties::get_id(int index)
{
return this->faculty_id[index];
}
string Faculties::getEmail(int index)
{
return this->faculty_email[index];
}
string Faculties::get_address(int index)
{
return this->faculty_address[index];
}
void Faculties::set_payments(float decidedSalary, string payment_method, float total_working_hours)
{
//Using composition
accounts.set_decided_salary(decidedSalary);
accounts.set_payment_method(payment_method);
accounts.set_total_working_hours(total_working_hours);
}
void Faculties::showPaymentDetails(int index)
{
cout << "nThe decided salaray of faculty with name " << faculty_name[index] << " is " <<
accounts.get_decided_salary(index);
cout << "nThe payment method of faculty with name " << faculty_name[index] << " is " <<
accounts.get_payment_method(index);
cout << "nThe deducted salary of faculty with name " << faculty_name[index] << " is " <<
accounts.get_deducted_salary(index);
cout << "nThe paid salary of faculty with name " << faculty_name[index] << " is " <<
accounts.get_paid_salary(index);
cout << "nThe bonus salary paid of faculty with name " << faculty_name[index] << " is " <<
accounts.get_bonus_salary(index);
}

在这里显示类,它在source.cpp 中给出错误和相同

#pragma once
#include"Department.h"
#include"Student.h"
#include"Courses.h"
#include"SubCampuses.h"
#include"Faculties.h"
#include"Employee.h"
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Display
{
public:
Display()=default;
~Display()=default;
void setStudentsData(string, int, string)
{
}

void setStudentsData(string name, int id, string address, string email, int departmentID, int departmentStrength, string HODname);
void setStudentsAcademicRecord(float marks, char grades, float attandancePercentage, float CGPA);
void setStudentCourseInfo(Courses courses, string coursesEnrolled, float courseWiseAttandancePercentage, float courseWiseMarks);
//Setting the faculties of students
void setFacultiesInfo(string name,int id,string address,string email, float decidedSalary, string payment_method, float total_working_hours);
//setting the employees info
//void setEmployeesInfo(string name, int id, string address, string email, float decidedSalary, string payment_method, float total_working_hours);
void ShowStudentCoursesInfo();
void ShowStudentRecord(int);
void ShowFacultiesDetails(int);

//void ShowEmployeesDetails(int);
private:
//Using Inheritance
Student *student;
Courses courses;
Faculties faculties;
//Using Polymorphism
Department* department=new Faculties(); ///////////////////Here is the error ////////////////////////

};
Display::Display()
{
}
Display::~Display()
{
}
void Display::setStudentsAcademicRecord(float marks, char grades, float attandancePercentage, float CGPA)
{
student->set_student_marks(marks);
student->set_student_grades(grades);
student->set_Attandance_percentage(attandancePercentage);
student->set_GCPA(CGPA);
}
void Display::setStudentsData(string name, int id, string address, string email,int departmentID,int departmentStrength,string HODname)
{
student->setName(name);
student->set_id(id);
student->set_address(address);
student->setEmail(email);
} 
void Display::ShowStudentRecord(int id)
{
cout<<"nThe name of student is equal to "<<student->getName(id);
cout << "nThe Id of student is equal to " << student->get_id(id);
cout << "nThe Email of student is equal to " << student->getEmail(id);
cout << "nThe Adress of student is equal to " << student->get_address(id);
//Now showing the student academic records
student->ShowStudentAcademicRecord(id);
}
void Display::setStudentCourseInfo(Courses courses, string coursesEnrolled, float courseWiseAttandancePercentage, float courseWiseMarks)
{
courses.set_courses_enrolled(coursesEnrolled);
courses.set_coursewise_attendance_percentage(courseWiseAttandancePercentage);
courses.set_course_wise_marks(courseWiseMarks);
}
void Display::ShowStudentCoursesInfo()
{
//Passing the courses object to the courses info
student->ShowStudentCoursesInfo(courses);
}
void Display::setFacultiesInfo(string name, int id, string address, string email, float decidedSalary, string payment_method, float total_working_hours)
{
department->setName(name);
department->set_id(id);
department->set_address(address);
department->setEmail(email);
department->set_payments(decidedSalary, payment_method, total_working_hours);
}
void Display::ShowFacultiesDetails(int id)
{
cout<<"nThe id of department faculty is "<<department->get_id(id);
cout << "nThe Name of department faculty is " << department->getName(id);
cout << "nThe Email of department faculty is " << department->getEmail(id);
cout << "nThe Address of department faculty is " << department->get_address(id);
cout << "nThe Department faculty strength is " << department->getDepartmentStrength();
}

错误的屏幕截图如下错误图片完整的程序位于以下链接https://github.com/Muhammad-Bilal-7896/Univeristy-Management-System

作为@11201ProgramAlarm包含在注释中,您包含的循环内联可能会让编译器感到厌烦,并且程序无法编译,因此请删除那些不必要的头文件。还要使department类的析构函数成为虚拟的。请确保只有析构函数是虚拟的,而不是构造函数。

最新更新