将数组作为类属性

时间:2015-11-13 01:35:36

标签: c++ arrays

抱歉,我是c ++的新手,我觉得有点愚蠢,但是经过数小时的谷歌搜索,我无法让它工作,我无法找到我想要的东西。做错了

任务非常简单:

我希望员工有姓名,年龄等(那些工作) 我希望这些员工存储在一个数组中。

所以我有:

class Employee {

public:
    Employee(string, string, int, int);
    string name;
    string firstName;
    int birthYear;
    int usedVacation;
    int getAge();
};

然后是清单:

class EmployeeList {
public:
    int addEmployee(string, string, int, int);
    Employee eList[500];
};

我想要的是:一个包含Employee数组的对象,以及添加/编辑它们的方法。 所以我在课外定义addEmployee方法如下:

int EmployeeList::addEmployee(string first, string last, int year, int used) {
    int i = 0;

    for (i; i < this.eList.length; i++) {
        if (this.eList[i].deleted == true) {
            this.eList[i] = {
            firstName: first,
            lastName : last,
            birthYear : year,
            usedVacation : used,
            deleted : false };
    } else {
            this.eList.push({ firstName: first, lastName : last, birthYear : year, usedVacation : used, deleted : false });
    }
    return i;
    }
};

正如您可能立即看到的那样,这有很多错误。

VS2015中的所有this投掷Expression must have class type, 还有identifier firstName is undefinedidentifier lastName is undefined, 但在我看来,我的代码并没有错。

我非常确定这是一件非常基本的事情,我还没有做到,但我无法找到问题所在。

我定义了Employee之外的方法,而this在那里工作没有问题(虽然使用this->,但我尝试了它并且它也没有工作)

请原谅我缺乏技能,我来自javascript :(

2 个答案:

答案 0 :(得分:1)

  

this.eList [i] =

this是指针,而不是引用,因此您可以通过this->eList访问成员。但99.99%的时间,完全没有必要。您在成员方法中,因此编译器知道this是什么。您所需要的只是eList[i] =

  

this.eList.push({

首先是C ++中数组的简要教程。 Employee eList[500]没有制作可容纳500 Employee s的数组,eList 500 Employee s。永远的永远。它们是使用默认构造函数立即构造的(或者一旦你给Employee一个默认构造函数。如果你想在一个数组中有对象,除非在非常高级的情况下,这是必需的。)

  

this.eList.length

你可以用数组做三个动作:你可以使用[i]语法访问一个元素,它们经常神奇地转换为指向第一个项目的指针,最后,当且仅当它们被重新组合时结构的成员,可以复制它们。这就是你能用它们做的一切。没有推,因为正如我所说,它 500 Employee。没有length成员。你的总是500 Employee秒。

  

if(this.eList [i] .deleted == true)

您为每个Employee个成员提供了deleted个成员,Employee不是其中之一。通常情况下,不是跟踪哪些EmployeeList个对象未被使用,而是让所有员工都在前几个位置,并count Employee来跟踪多少&lastName #34;活&#34;有员工。现场直播是0计数。计数500的员工被删除&#34;。不幸的是,这确实意味着当一个被删除时,你必须在那之后转移所有的那些。

  

this.eList [i] = {               firstName:第一,               lastName:last,

Employee没有Employee(string, string, int, int)。构造eList[i] = Employee(first, last, year, used);的正确方法是通过您声明的构造函数:Employee。所以该行应该是$url。这将创建一个新的$url对象,然后将其复制到该数组的该插槽中。或者,只需逐个分配成员。

答案 1 :(得分:-1)

如下:

#include<string>

class Employee
{
  public:
    std::string firstname;
    std::lastname;
    int birthyear;
    int usedVacation;

    void setFirstname(std::string fname){firstname = fname;}
    void setLastname(std::string lname){lastname = lname;}
    void setBirthyear(int year){birthyear = year;}
    void setVacation(int vac){usedVacation = vac;}
};


class EmployeeList
{
  public:
    int count;
    EmployeeList eList[500];

    EmployeeList()
    {
      count = 0;
    }

    void addEmployee(std::string fname, std::string lname, int year, int vac);
    void removeEmployee(std::string fname, std::string lname, int year, int vac);
};


void EmployeeList::addEmployee(std::string fname, std::string lname, int year, int vac)
{
  //some stuff goes here
  count++;
}

void EmployeeList::removeEmployee(std::string fname, std::string lname, int year, int vac)
{
  //some stuff goes here
  count--;
}

BTW我不确定你的推送,删除和长度方法来自哪里?您可能还想添加更多方法,然后添加我编写的方法,例如返回计数的方法。您还可以将get方法添加到employee类,并将您的成员变量设为私有。我希望这有一些帮助。古德勒克!