我根据我的理解创建了这个类,但它提供了许多错误,我正在尝试做的是创建一个雇员类,并基本上学会了如何使用它来创建和操作对象。任何帮助是极大的赞赏。 :)
#include <iostream>
#include <string>
using namespace std;
class employeeClass
{
private:
int emplNumber;
string empName;
string stAddress;
string phoneNumber;
double hourlyWage;
double hoursWorked;
public:
employeeClass();//not parametized constructor
employeeClass(int, string, string, string, double, double);
~employeeClass();//destructor to release memory if object assigned dynamic memory
void setEmpnumber();
int getEmpnumber();
void setEmpname();
string getEmpname();
void setstAddress();
string getstAddress();
void setphoneNumber();
string getphoneNumber();
void setHourlywage();
double getHourlywage();
void sethoursWorked();
double gethoursWorked();
employeeClass::employeeClass()
{
int emplNumber;
string empName;
string stAddress;
string phoneNumber;
double hourlyWage = 0;
double hoursWorked = 0;
}
employeeClass::employeeClass(int a, string b, string c, string d, double e, double f)
{
emplNumber=a;
empName=b;
stAddress=c;
phoneNumber=d;
hourlyWage=e;
hoursWorked=f;
}
void employeeClass::setEmpnumber(int a)
{
emplNumber=a;
}
int employeeClass::getEmpnumber()
{
return emplNumber;
}
void employeeClass::setEmpname(string b)
{
empName=b;
}
string employeeClass::getEmpname()
{
return emplNumber;
}
void employeeClass::setstAddress(string c)
{
stAddress=c;
}
string employeeClass::getstAddress()
{
return stAddress;
}
void employeeClass::setphoneNumber(string d)
{
phoneNumber=d;
}
string employeeClass::getphoneNumber()
{
return phoneNumber;
}
void employeeClass::setHourlywage(double e)
{
hourlyWage=e;
}
double employeeClass::getHourlywage()
{
return hourlyWage;
}
void employeeClass::sethoursWorked(double f)
{
hoursWorked=f;
}
double employeeClass::gethoursWorked()
{
return hoursWorked;
}
};
int main ()
{
employeeClass gama, tito;
gama.setEmpname("Gamaliel tellez");
gama.setphoneNumber("8018839494");
gama.setEmpnumber('12');
gama.setHourlywage('345');
gama.sethoursWorked('23');
cout<<"Employee info: "<<endl;
cout<<"Name: "<<gama.getEmpname<<endl;
cout<<"Phone number: "<<gama.getphoneNumber<<endl;
cout<<"Emp number: "<<gama.getEmpnumber<<endl;
cout<<"Hourly wage: $"<<gama.getHourlywage<<endl;
cout<<"Hours worked: "<<gama.gethoursWorked<<endl;
system ("PAUSE");
return 0;
}
答案 0 :(得分:2)
你在同一个类中创建了方法原型和实现。你应该将它们分开。您的.h
文件应包含:
class employeeClass
{
private:
int emplNumber;
string empName;
string stAddress;
string phoneNumber;
double hourlyWage;
double hoursWorked;
public:
employeeClass();//not parametized constructor
employeeClass(int, string, string, string, double, double);
~employeeClass();//destructor to release memory if object assigned dynamic memory
void setEmpnumber();
int getEmpnumber();
void setEmpname();
string getEmpname();
void setstAddress();
string getstAddress();
void setphoneNumber();
string getphoneNumber();
void setHourlywage();
double getHourlywage();
void sethoursWorked();
double gethoursWorked();
};
所有的实现都应该放在单独的.cpp
文件中,因为你需要包含头文件和实现方法,它应该是这样的:
void employeeClass::setEmpnumber(int a)
{
emplNumber=a;
}
有一种方法可以让它在标题中包含所有内容,但最好分开,因为头文件中的更改是重新编译所有内容的信号,因此分离是节省时间。
同样在你的main()
中,所有方法都必须在末尾有括号,如果有参数传递与否则无关紧要,所以你需要更改
cout<<"Name: "<<gama.getEmpname<<endl;
到
cout<<"Name: "<<gama.getEmpname()<<endl;
等等。
顺便说一句。这不是错误,而是建议,不要在全局范围内使用using
,后者则会处理更大的项目using
可能会造成很多混乱,所以最好使用std::string
,{ {1}}依旧......
另外,您可能在std::cout
上看到了C/C++
的新内容,如果您有更多相互包含的标题,那么标题也需要它。
答案 1 :(得分:2)
有几件事:
首先,以employeeClass::
开头的任何内容都是一个实现,您应该将它们移出类定义之外。建议使用声明和带有imlement的.cpp文件编写.h文件。
其次,您的声明还应包含参数,例如,void setEmpname();
应该变为无效void setEmpname(string b);
您也错过了析构函数的实现。它会像employeeClass::~employeeClass(){}
每次调用函数时,即使它没有参数,也应该使用括号。例如,在main
中,gama.getEmpname
变为gama.getEmpname()
。
建议不要使用system ("PAUSE");
,但如果您想使用它,则应添加#include <cstdlib>
此外,虽然using namespace std;
不会导致像这样的小代码片段出现任何问题,但它可能会导致与使用大量库的大型项目发生冲突。很高兴意识到这一点。
下面列出了包含这些更正的代码的工作版本:
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
class employeeClass {
private:
int emplNumber;
string empName;
string stAddress;
string phoneNumber;
double hourlyWage;
double hoursWorked;
public:
employeeClass();//not parametized constructor
employeeClass(int, string, string, string, double, double);
~employeeClass();//destructor to release memory if object assigned dynamic memory
void setEmpnumber(int a);
int getEmpnumber();
void setEmpname(string b);
string getEmpname();
void setstAddress(string c);
string getstAddress();
void setphoneNumber(string d);
string getphoneNumber();
void setHourlywage(double e);
double getHourlywage();
void sethoursWorked(double f);
double gethoursWorked();
};
employeeClass::employeeClass() {
int emplNumber;
string empName;
string stAddress;
string phoneNumber;
double hourlyWage = 0;
double hoursWorked = 0;
}
employeeClass::employeeClass(int a, string b, string c, string d, double e, double f) {
emplNumber=a;
empName=b;
stAddress=c;
phoneNumber=d;
hourlyWage=e;
hoursWorked=f;
}
employeeClass::~employeeClass() {}
void employeeClass::setEmpnumber(int a) {
emplNumber=a;
}
int employeeClass::getEmpnumber() {
return emplNumber;
}
void employeeClass::setEmpname(string b) {
empName=b;
}
string employeeClass::getEmpname() {
return empName;
}
void employeeClass::setstAddress(string c) {
stAddress=c;
}
string employeeClass::getstAddress() {
return stAddress;
}
void employeeClass::setphoneNumber(string d) {
phoneNumber=d;
}
string employeeClass::getphoneNumber() {
return phoneNumber;
}
void employeeClass::setHourlywage(double e) {
hourlyWage=e;
}
double employeeClass::getHourlywage() {
return hourlyWage;
}
void employeeClass::sethoursWorked(double f) {
hoursWorked=f;
}
double employeeClass::gethoursWorked() {
return hoursWorked;
}
int main () {
employeeClass gama, tito;
gama.setEmpname("Gamaliel tellez");
gama.setphoneNumber("8018839494");
gama.setEmpnumber('12');
gama.setHourlywage('345');
gama.sethoursWorked('23');
cout<<"Employee info: "<<endl;
cout<<"Name: "<<gama.getEmpname()<<endl;
cout<<"Phone number: "<<gama.getphoneNumber()<<endl;
cout<<"Emp number: "<<gama.getEmpnumber()<<endl;
cout<<"Hourly wage: $"<<gama.getHourlywage()<<endl;
cout<<"Hours worked: "<<gama.gethoursWorked()<<endl;
system ("PAUSE");
return 0;
}
答案 2 :(得分:1)
让您的类的定义仅包含声明,例如:
public:
void setEmpnumber(int);
这些成员的实施,例如:
void employeeClass::setEmpnumber(int a)
{
emplNumber=a;
}
应放在class
之外。另请注意,在调用这些方法时您缺少()
:
cout<<"Emp number: "<<gama.getEmpnumber()<<endl;
^^
答案 3 :(得分:1)
void employeeClass::setEmpnumber(int a)
// ^^^^^^^^^^^^^^^
当您在课堂上 之外
时,您正在课堂上对您的方法进行资格认定。您还需要使用()
来调用您的方法:
cout << "Name: " << gama.getEmpname() << endl;
cout << "Phone number: " << gama.getphoneNumber() << endl;
cout << "Emp number: " << gama.getEmpnumber() << endl;
cout << "Hourly wage: $" << gama.getHourlywage() << endl;
cout << "Hours worked: " << gama.gethoursWorked() << endl;