将数组从类传递到main
Pass array from class to main
我正试图在一个单独的类文件中创建一个由10个Employee对象组成的数组,然后从我的main访问它。我有三个单独的档案。Employee.cpp、Employee.h和EmployeeArray10.h
Employee.cpp显然是主要的,Employee.h持有Employee()类的构造函数、getter和setter,EmploloyeeArray10.h是创建由十个Employee()对象组成的数组的地方。我遇到的问题是,我如何从main()创建和访问EmployeeArray10.h文件中创建的数组,从而在EmployesArray10.h中创建的对象上使用employee()类中的tostring()函数
我已经盯着这个看了好几个小时了,如有指导,不胜感激。如果这还不够清楚,请告诉我。
#include <iostream>
#include <string>
#include "Employee.h"
#include "EmployeeArray10.h"
using namespace std;
int main(){
Employee employee1;
Employee employee2(001, "Rob", "Address");
Employee employee3(002, "Tom", "The Street", "Science Dept", 25000.00, "99-CW-4753");
employee1.tostring();
employee2.tostring();
employee3.tostring();
EmployeeArray10 employeeArray;
for(int i=0; i <=10; i++){
employeeArray[i].EmployeeArray10.Employee.tostring();
}
return 0;
}
员工.h:
#include <iostream>
#include <string>
using namespace std;
class Employee
{
private:
int number;
string name;
string address;
string department;
double salary;
string regNumber;
// CONSTRUCTOR METHODS
public:
Employee()
{
setNumber(0);
setName("");
setAddress("");
setDepartment("");
setSalary(0.0);
setRegNumber("");
}
Employee(int pNum, string pName, string pAddress)
{
setNumber(pNum);
setName(pName);
setAddress(pAddress);
setDepartment("");
setSalary(0.0);
setRegNumber("");
}
Employee(int pNum, string pName, string pAddress, string pDepartment, double pSalary, string pRegNumber)
{
setNumber(pNum);
setName(pName);
setAddress(pAddress);
setDepartment(pDepartment);
setSalary(pSalary);
setRegNumber(pRegNumber);
}
// SET METHODS
void setNumber(int pNum)
{
number = pNum;
}
void setName(string pName)
{
name = pName;
}
void setAddress(string pAddress)
{
address = pAddress;
}
void setDepartment(string pDepartment)
{
department = pDepartment;
}
void setSalary(double pSalary)
{
salary = pSalary;
}
void setRegNumber(string pRegNumber)
{
regNumber = pRegNumber;
}
// GET METHODS
int getNumber()
{
return number;
}
string getName()
{
return name;
}
string getAddress()
{
return address;
}
string getDepartment()
{
return department;
}
double getSalary()
{
return salary;
}
string getRegNumber()
{
return regNumber;
}
// MISC METHODS
void tostring()
{
cout << "nnEmployee ObjectnNumber: " << number <<
"nName: " << name <<
"nAddress: " << address <<
"nDepartment: " << department <<
"nSalary: " << salary <<
"nTax payable: " << taxPayable(salary) <<
"nCar reg. no.: " << regNumber <<"nn";
}
double taxPayable(double mSalary){
double result = 0;
if (mSalary <= 20000 && mSalary >=1){
result = mSalary * 0.2;
}
else if(mSalary > 20000){
result = (20000 * 0.2) + ((mSalary - 20000) * 0.4);
}
return result;
}
};
员工阵列10.h
#include <iostream>
#include <string>
using namespace std;
class EmployeeArray10{
public:
EmployeeArray10(){
Employee *newEmpArray = new Employee[10];
for(int i=0; i <=10; i++){
newEmpArray[i].setNumber(i+1);
}
}
};
这在很多方面都有很多缺陷,我甚至不知道从哪里开始,但我会为您说明一些基本错误,以便开始学习。你可能想查找我强调的单词:
- 类EmployeeArray10没有成员变量。它只有一个构造。没有meber变量意味着它不能有任何状态或存储任何内容
- 构造函数分配内存,从不将指向它的指针存储在任何位置。这意味着存在内存泄漏
- 在标题中,您包含了从未在其中使用过的标准标题。为什么
- 在相同的标头中,您有using指令。千万不要在头文件中这样做。它会将名称空间溢出整个项目,使名称空间实际上毫无用处
- 您将方式定义为许多getter和setter封装是有原因的,您可以通过使所有内容都可访问来打破它
- 在两个for循环中,从0循环到10,包括10。这意味着你试图访问只有10个成员的11个成员。阅读你选择的初学者课本中的循环
toString()
是一个函数的名称,该函数将某些内容转换为字符串。在你的情况下,它会做一些不同的事情。给你的函数起一个有意义的名字,而不是误导性的名字-
线
employeeArray[i].EmployeeArray10.Employee.tostring();
根本没有意义:- EmployeeArray10没有
operator[]
,所以employeeArray[i]
没有意义。我假设您希望访问该数组中的第I个Employee - Employee没有成员变量
EmployeeArray10
,所以employeeArray[i].EmployeeArray10
没有意义 - 与
employeeArray[i].EmployeeArray10.Employee
相同 - 也许你指的是
employeeArray[i].tostring()
,但人们只能猜测。编译器做不到,所以他会逃跑
- EmployeeArray10没有
老实说,整个代码看起来像是从其他地方复制粘贴的代码,没有完全理解你(或代码)在做什么。你应该读一本关于语言基本概念的好书,然后循序渐进。
三个词:使用成员变量。
EmployeeArray10类不会返回指向其创建的数组的指针,因此无法从构造函数外部访问(因此也无法删除,这意味着内存泄漏)。
构造函数也不能有返回类型。您需要为EmployeeArray10编写一个解构函数来修复内存泄漏,然后编写一个返回数组指针的函数,以便您可以在类外实际使用它。
坦率地说,如果可以的话,只需使用现代C++工具,比如std::vector<Employee>
。
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 动态数组传递给 main 中用随机值填充的函数,返回值3221226356
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 如何使类函数返回数组,然后将其调用并存储在 main 中
- void 函数将数组发送回 main,但我无法让数组正确输出值
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- 如何在另一个函数中初始化在 main 中声明的数组
- 似乎无法让字符数组离开函数并在 main 中使用
- 从 Main 中的双指针函数打印出指针数组
- 在C 中的另一个函数中使用Main()中的数组
- 如何将指向数组的指针从 main 传递到函数
- 析构函数删除在 main 中声明的动态数组
- 在代码块错误中收到此错误:数组下标'main()::fields[int]'的类型无效
- C++ int main (int argc, char *argv[]) - 是 argv a c 样式数组
- 在 main.cpp 以外的文件中定义静态数组
- 当结构定义在头文件中时,如何在main()中创建结构数组
- C++:使来自main()的数组在另一个函数中可用
- 为什么在包含类头的情况下,我的数组在main中未定义
- 如何在main中使用指针数组