2017-11-21 8 views
0
#include <string> 
#include <iostream> 
using namespace std; 

//-----------------------------------------------------------------// 
//-------------------------class employee--------------------------// 
//-----------------------------------------------------------------// 
class Employee 
{ 
private: string empName; 
    int empNum; 
    string hireDate; 
public: 
Employee():empName(""),empNum(0), hireDate("") //default ctor 
{} 

Employee(string name, int num, string date) 
{ 
    empName = name; 
    empNum = num; 
    hireDate = date; 
} 

void setempName(string n); 
void setempNum(int nm); 
void setHiredate(string d); 
string getName(); 
int getNum(); 
string getDate(); 
void print(); 
}; 

void Employee::setempName(string n) 
{empName = n ;} 

void Employee::setempNum(int nm) 
{empNum = nm;} 

void Employee::setHiredate(string d) 
{hireDate = d;} 

string Employee::getName() 
{return empName;} 

int Employee::getNum() 
{return empNum;} 

string Employee::getDate() 
{return hireDate;} 
//-----------------------------------------------------------------// 
//--------------------class production worker----------------------// 
//-----------------------------------------------------------------// 
class ProductionWorker : public Employee 
{ 
private: 
int shift; 
double hrlyPay; 
public: 
ProductionWorker():shift(0) , hrlyPay(0.0) 
{} 

ProductionWorker(int sh , double pay) 
{ 
    shift = sh; 
    hrlyPay = pay; 
} 

void setshift(int s); 
void setPay(double p); 
int getshift(); 
double getPay(); 
void print(); 
}; 

void ProductionWorker::print() 
{ 
cout << "Employee Name: " << getName() << endl; 
cout << "Employee Number: " << getNum() << endl; 
    cout << "Hire Date: " << getDate() << endl; 
    cout << "Shift: " << getshift(); 

if(shift == 1) 
{ 
    cout << "(Day Shift)" << endl;} 
else 
    cout << "(Night Shift)" << endl; 

    cout << "Pay Rate: $" << getPay()<< endl; 
} 

void ProductionWorker::setshift(int sh) // 
{sh = shift;} 

void ProductionWorker::setPay(double p) 
{p = hrlyPay;} 

int ProductionWorker::getshift() 
{return shift;} 

double ProductionWorker::getPay() 
{return hrlyPay;} 
//-----------------------------------------------------------------// 
//-------------------------Main------------------------------------// 
//-----------------------------------------------------------------// 
int main() 
{ 
int Shift; 
double pay; 
cout << "Enter 1 for Day Shift or 2 for Night Shift: "<<endl; 
cout<< "Any deviation will default to Night Shift "; 
cin >> Shift; 
cout << "Enter hourly pay: $"; 
cin >> pay; 
    ProductionWorker emp1(Shift, pay); 
emp1.setempName("Pedro, Colon"); 
emp1.setempNum(8675309); 
emp1.setHiredate("1-1-2000"); 
emp1.print(); 
return 0; 
} 

私はすべてを1つのmain関数に入れます。しかし、私はクラスを独自の定義ファイルと実装ファイルに分けて、それ自身のファイルをmainにしようとします。私のコードは動作しません。私のコードに何か問題はありますか? 私は2定義と2つの実装ファイル独自の定義ファイルと実装ファイルにクラスを分けて、それ自身のファイルにmainを付けます。

+1

あなたはコードに何が間違っているかを教えてください。エラーメッセージが表示されますか?はいの場合は、質問にそれらを含める必要があります – user463035818

+0

私はすでに私の質問にエラーを追加しました。 –

+1

'#include ' – user463035818

答えて

3

あなたのメインはusing namespace std;が含まれ、1つの主な機能にそれらを分離する必要があります:私はC++

問題のちょうど初心者だ私を助けてください。これにより、std名前空間の要素(std::stringなど)が資格なしで利用できるようになります(つまり、string)。

ヘッダーファイルにはこれが含まれていないため、タイプを修飾する必要があります。 usingディレクティブをヘッダーファイルに追加しないでください。そうすることは悪いスタイルとみなされます。なぜなら、ヘッダーのユーザーにグローバル名前空間内のすべてのstdシンボルを持たせるからです。

コメントに記載されているように、必要なヘッダファイルも必要に応じて追加する必要があります。 employee.hにはタイプstd::stringのフィールドがあるので、そのファイルには#include <string>が必要です。

+0

私のコードを編集しましたが、別の問題があります。 main関数では、 'Employee :: setempName(std :: string)への未定義の参照、' Employee :: setempNum(int) 'への未定義の参照を示しています。このエラーでどうすればよいですか? –

+0

あなたはファイルを一緒にリンクしていません。複数のソースファイルがある場合、コンパイルは少し複雑になります。ほとんどのチュートリアルでは、それがどのように動作するかを説明する必要があります –

関連する問題