将类对象传递到模板化类私有成员范围 我是C++新手,想学点东西。也许这是不可能的。但我想: 创建一个记录所有员工及其信息的Employee类(请参见下面的“我的代码”) 然后我想为链表创建一个模板类。在这个类的私有范围内,我将有一个“T data”类型。

将类对象传递到模板化类私有成员范围 我是C++新手,想学点东西。也许这是不可能的。但我想: 创建一个记录所有员工及其信息的Employee类(请参见下面的“我的代码”) 然后我想为链表创建一个模板类。在这个类的私有范围内,我将有一个“T data”类型。,c++,C++,将类对象传递到模板化类私有成员范围 我是C++新手,想学点东西。也许这是不可能的。但我想: 创建一个记录所有员工及其信息的Employee类(请参见下面的“我的代码”) 然后我想为链表创建一个模板类。在这个类的私有范围内,我将有一个“T data”类型。我希望每次在main中创建LinkedList对象时,我的构造函数都实例化一个“Employee”。我希望这是有道理的。我的代码按照我现在设置的方式工作。然而,我并不一定要按照我想要的方式来模板化它 模板 类雇员{//Parent 私人: 国

将类对象传递到模板化类私有成员范围 我是C++新手,想学点东西。也许这是不可能的。但我想:

  • 创建一个记录所有员工及其信息的Employee类(请参见下面的“我的代码”)
  • 然后我想为链表创建一个模板类。在这个类的私有范围内,我将有一个“T data”类型。我希望每次在main中创建LinkedList对象时,我的构造函数都实例化一个“Employee”。我希望这是有道理的。我的代码按照我现在设置的方式工作。然而,我并不一定要按照我想要的方式来模板化它
模板
类雇员{//Parent
私人:
国际雇员ID;
双倍工资;
整小时;
双倍工资率;
std::字符串Employeename;
公众:
雇员(int-ID,双Prate,std::string-EName){
EmployeeID=ID;
工资率=普拉特;
Employeename=EName;
Hours=0;//我们的构造函数只能给每个员工0小时。
薪水=0.00;
}
雇员(){
EmployeeID=0;
工资率=0.0;
Employeename=“不适用”;
小时=0;
薪水=0.00;
}
作废setPaycheck(){

然而,我不一定按照我想要的方式来模板化它-你是什么意思?我不明白你的问题。
模板
不是一个
——它本身不是一种类型。
模板类
是一种使
成为一种类型的代码。
员工
是一个类——一种类型。当你键入
员工
时,你正在使用它它好像
员工
是一个模板。它不是一个模板。还有语法错误;
员工
--为什么是复数?它包含一个员工的信息,而不是多个员工的信息。您的继承也没有意义:
类LinkedList:Employees
LinkedList
不是
员工
,它有
Employee
。最后,为什么
LinkedList
是一个模板?
T
应该是生成实际链接列表的type函数的一个参数;您不使用它。您的意思是
LinkedList
?@yakadamnevraumont现在
Employees
是一个类模板:-)它显然是一个编辑churill修复的错误。
gazeb0:
您创建的是通过连接的类。这在某些情况下非常方便,但链表通常与类型无关,并且不关心列表中的类型。我建议不要将
Employee
作为模板,直到您发现需要它并使您的链表能够正常工作h任何类型,不仅仅是
员工
。哇,我真不敢相信我这么快就得到了回复。@Ted Lyngnmo。非常感谢大家。是的,这是我的错别字。Ted,你比我解释得更好,本质上,我想把我的“LinkedList's EmployeeObject”变成“t数据”,这意味着它可以接受数据类型,而sti我将执行链接等所需的操作。但是,当我创建一个试图将“T data”设置为Employees对象的构造函数时,我收到一个错误,上面写着“Field has complete type'T'”。我不确定我到底做错了什么。谢谢大家的回复。
template <class T>
class Employees { //Parent
private:
    int EmployeeID;
    double Paycheck;
    int Hours;
    double Payrate;
    std::string Employeename;
public:
    Employees(int ID, double Prate, std::string EName) {
        EmployeeID = ID;
        Payrate = Prate;
        Employeename = EName;
        Hours = 0; //our constructor can just give each Employee 0 hours.
        Paycheck = 0.00;
    }
    Employees() {
        EmployeeID = 0;
        Payrate = 0.0;
        Employeename = "N/A";
        Hours = 0;
        Paycheck = 0.00;
    }
    void setPaycheck() {
        std::cout << std::fixed;
        std::cout << std::setprecision(2);
        double i = Payrate;
        i = i * 100;
        i = i * Hours;
        i = i / 100;
        Paycheck = i;
        //so I'm not sure why I couldn't just cast the double, but the complier kept rounding down each time.
        // I had to make a conversion of my decimal into a whole number and then go back and divide it to get the
        // paycheck amount.
    };
    void setEMPname(std::string Name) {
        Employeename = Name;
    }
    void setPayrate(double payrate) {
        Payrate = payrate;
    }
    void setEMPid(int IDnum) {
        EmployeeID = IDnum;
    }
    void setHOURS(int hours) {
        Hours += hours;
    }
    int IDReturn() { return EmployeeID; }
    int HoursReturn() { return Hours; }
    double PaycheckReturn() { return Paycheck; }
    double PayrateReturn() { return Payrate; }
    std::string NameReturn() { return Employeename; }
};

template <class T>
class LinkedLists :Employees<T> { //child
    friend class Employees<T>;
private:
////I want change the object below to "T data"
    Employees<T> EmployeeObject; //contains all the employee information 
    LinkedLists<T>* nextlink;
    LinkedLists<T>* prevlink;
public:
    LinkedLists() {
        EmployeeObject;
        nextlink = nullptr;
        prevlink = nullptr;
    }
    void setname(std::string Name) {
        EmployeeObject.setEMPname(Name);
    }
    void setPrate(double payrate) {
        EmployeeObject.setPayrate(payrate);
    }
    void setid(int IDnum) {
        EmployeeObject.setEMPid(IDnum);
    }
    void setPayCheck() { EmployeeObject.setPaycheck(); }
    LinkedLists<T>*& setLinkforward() {
        return nextlink;
    }
    LinkedLists<T>*& setLinkbackward() {
        return prevlink;
    }
    int idReturn() { return EmployeeObject.IDReturn(); }
    double payrateReturn() { return EmployeeObject.PayrateReturn(); }
    std::string nameReturn() { return EmployeeObject.NameReturn(); }
    void AddHours(int Hours) { EmployeeObject.setHOURS(Hours); }
    int ReturnHours() { return EmployeeObject.HoursReturn(); }
    double ReturnPayCheck() {

        return EmployeeObject.PaycheckReturn();
    }

};