2

我根据我的理解创建了这个类,但是它给出了很多错误,我想做的是创建一个员工类,并且基本上学会了如何用它创建和操作对象。任何帮助是极大的赞赏。:)

#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;

}
4

4 回答 4

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::stringstd::cout等等......

此外,由于您可能是新手,C/C++您可能会阅读#pragma once 并 include guards,如果您将有更多相互包含的标头,则标头也需要它。

于 2013-10-11T20:23:44.477 回答
2

几件事:

首先,任何以实现开头的东西employeeClass::,您都应该将它们移到类定义之外。建议编写一个带有声明的 .h 文件和一个带有实施的 .cpp 文件。

其次,您的声明还应该包含参数,例如,void setEmpname(); 应该变为 voidvoid setEmpname(string b);

您还缺少析构函数的实现。会是这样的employeeClass::~employeeClass(){}

每次调用函数时,即使它没有参数,也应该使用括号。例如,在 中maingama.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;

}
于 2013-10-11T20:29:39.907 回答
1

让你的类的定义只包含如下声明:

public:
    void setEmpnumber(int);

以及这些成员的实现,例如:

void employeeClass::setEmpnumber(int a)
{
    emplNumber=a;
}

应该放在 a 之外class。另请注意,()调用这些方法时您会丢失:

cout<<"Emp number: "<<gama.getEmpnumber()<<endl;
                                       ^^
于 2013-10-11T20:19:22.927 回答
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;
于 2013-10-11T20:20:22.010 回答