Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在类之间建立多态性,在新运算符处出现错误_C++_Oop_Inheritance_Polymorphism - Fatal编程技术网

C++ 无法在类之间建立多态性,在新运算符处出现错误

C++ 无法在类之间建立多态性,在新运算符处出现错误,c++,oop,inheritance,polymorphism,C++,Oop,Inheritance,Polymorphism,我正在写一个大学管理系统,我一共有十个类。我们知道,当我们在基类中使用虚函数时,我们在类之间建立了多模态,然后我们从基类继承派生类,虚函数在派生类中被重写,但在这里我面临一个我从未遇到过的问题在C++中已经实现了多态性很多,但是现在它在我写这个语句时出错,错误在新的关键字中。 //Using Polymorphism Department* department=new Faculties(); 我无法建立这些部门和faculties类之间的多态性。类似地,有一个employee类是

我正在写一个大学管理系统,我一共有十个类。我们知道,当我们在基类中使用虚函数时,我们在类之间建立了多模态,然后我们从基类继承派生类,虚函数在派生类中被重写,但在这里我面临一个我从未遇到过的问题在C++中已经实现了多态性很多,但是现在它在我写这个语句时出错,错误在新的关键字中。
 //Using Polymorphism
    Department* department=new Faculties();
我无法建立这些部门和faculties类之间的多态性。类似地,有一个employee类是从department派生的,同样的错误是,我非常困惑,因为我仍然是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一次
#包括“Accounts.h”
#包括“Faculties.h”
#包括“Employee.h”
#包括
#包括
使用名称空间std;
#包括
班级部
{
公众:
Department()=默认值;
~Department()=默认值;
//声明方法
//二传手
void setDepartmentID(int);
void setDepartmentStrength(int);
void setHODName(字符串);
//继承
虚拟空集合名(字符串);
虚空集_id(int);
虚拟无效集合地址(字符串);
虚拟邮件(字符串);
//定义吸气剂
虚拟字符串getName(int);
虚拟int获取_id(int);
虚拟字符串get_地址(int);
虚拟字符串getEmail(int);
//用于计算付款
虚拟无效集_付款(浮动、字符串、浮动)=0;
虚拟void showPaymentDetails(int);
//吸气剂
int getDepartmentStrength();
私人:
矢量部门名称;
病媒科方法;
向量部门ID;
向量部门强度;
//声明一个数组以输入系教师
};
部门::部门()
{
}
部门::~部门()
{
}
作废部门::setDepartmentID(内部id)
{
部门id。推回(id);
}
作废部门::设置名称(字符串名称)
{
部门名称。推回(名称);
}
无效部门::设置部门强度(内部强度)
{
部门力量。推回(力量);
}
作废部门::setHODName(字符串名称)
{
部门方法推回(姓名);
}
内部部门::getDepartmentStrength()
{
静态整数和=0;
对于(size_t i=0;i
院系班级

#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);
}
#pragma一次
#包括“Accounts.h”
#包括“Department.h”
#包括
#包括
#包括
使用名称空间std;
班级院系:公共部门
{
公众:
Faculties()=默认值;
~Faculties()=默认值;
//////////////////////////////////使用多态性///////////////////////////////////
//二传手
无效集合名(字符串)覆盖;
无效集合id(int)覆盖;
无效集合地址(字符串)覆盖;
无效设置电子邮件(字符串)覆盖;
无效集合付款(浮动、字符串、浮动);
//吸气剂
字符串getName(int)重写;
int get_id(int)覆盖;
字符串getEmail(int)覆盖;
字符串get_地址(int)覆盖;
//用于显示付款
作废showPaymentDetails(int)覆盖;
私人:
矢量识别;
载体名称;
矢量教员电子邮件;
矢量地址;
向量u型;
向量描述;
账户;
};
学院::学院()
{
}
学院::~Faculties()
{
}
空系::集合id(内部id)
{
此->教员id.推回(id);
}
void Faculties::setEmail(字符串电子邮件)
{
此->教员电子邮件。向后推(电子邮件);
}
void Faculties::setName(字符串名称)
{
此->教员姓名。推回(姓名);
}
void Faculties::set_地址(字符串saddress)
{
这->教员地址。推回(女鞍);
}
字符串Faculties::getName(int索引)
{
返回此->教员名称[索引];
}
int Faculties::get_id(int索引)
{
返回此->教员id[索引];
}
字符串Faculties::getEmail(int索引)
{
返回此->教职员工电子邮件[索引];
}
字符串功能::获取地址(整数索引)
{
返回此->教员地址[索引];
}
无效教师::设置工资(浮动决定工资、字符串工资方法、浮动总工时)
{
//使用构图
账户。设置决定工资(决定工资);
账户。设置付款方式(付款方式);
设置总工作时间(总工作时间);
}
void Faculties::showPaymentDetails(内部索引)
{

cout作为@1201programalam包含在注释中,您正在包含循环引用,这可能会使编译器感到恼火,并且程序无法编译,因此请删除那些不必要的头文件。还应将department类的析构函数设置为虚拟。确保只有析构函数是虚拟的,而不是构造函数。

使department类的析构函数成为虚拟的nt析构函数虚拟。ppl否决你的原因是你没有发布一个最小的可复制示例。也宁愿在你的帖子中引用你的错误,而不是给出链接screenshot@user谢谢你,先生,我正在试你的advice@user先生,我已经尝试了您的解决方案,但错误仍然与我编写的
Department()=default;virtual~Department()相同;//声明方法
您有循环包含。基类不需要知道任何有关派生类的信息。@1201非常感谢我的问题已经解决,错误已经消失
#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();
}