抱歉,我是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 undefined
和identifier lastName is undefined
,
但在我看来,我的代码并没有错。
我非常确定这是一件非常基本的事情,我还没有做到,但我无法找到问题所在。
我定义了Employee
之外的方法,而this
在那里工作没有问题(虽然使用this->
,但我尝试了它并且它也没有工作)
请原谅我缺乏技能,我来自javascript :(
答案 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类,并将您的成员变量设为私有。我希望这有一些帮助。古德勒克!