2016-04-21 11 views
-1

私は、名前、ID、セールスアマウント、手数料金額のような従業員のデータを格納し、収益(売上*手数料)を計算するC++プログラムを作成しています。私は継承の概念を使用しています。私の基本クラスは「Employee」で、派生クラスは「SeniorEmployee」です。プログラムを実行すると、コンパイラは私に基本クラスのプライベートメンバーにアクセスできないというエラーを返します。エラーが2行目に別のエラーが再び基底クラスのプライベート変数にアクセスするとエラーが発生する派生クラス

error: 'int Employee::id' is private

error: 'double Employee::sales' is private

私のコードで以下の3行目に同じエラーでこの

error: 'std::__cxx11::string Employee::name' is private.

のようなものです。私はすべてのファイルを含んでいます。

ファイルEmployee.h

#ifndef EMPLOYEE_H_ 
#define EMPLOYEE_H_ 

#include <iostream> 
#include <string> 
using namespace std; 


class Employee { 

public: 

    Employee(string EmpName, int EmpID, double EmpSales, double EmpComm); 

    void setName(string EmpName); 
    string getName(); 

    void setID(int EmpID); 
    int getID(); 

    void setSales(double EmpSales); 
    double getSales(); 

    void setComm(double EmpComm); 
    double getComm(); 

    double earning(); 


private: 

    string name; 
    int id; 
    double sales; 
    double commission; 

}; 


#endif 

ファイルEmployee.cpp

#include <iostream> 
#include <string> 
#include "Employee.h" 

using namespace std; 

Employee::Employee(string EmpName, int EmpID, double EmpSales, double EmpComm): name(EmpName), id(EmpID), sales(EmpSales), commission(EmpComm) 
{ 

} 

void Employee::setName(string EmpName) { 
    name=EmpName; 
} 

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

void Employee::setID(int EmpID) { 
    id=EmpID; 
} 

int Employee::getID() { 
    return id; 
} 

void Employee::setSales(double EmpSales) { 
    sales=EmpSales; 
} 

double Employee::getSales() { 
    return sales; 
} 

void Employee::setComm(double EmpComm) { 
    commission=EmpComm; 
} 

double Employee::getComm() { 
    return commission; 
} 

double Employee::earning() { 
    return sales*commission; 
} 

ファイルSeniorEmployee.h

#ifndef SENIOREMPLOYEE_H_ 
#define SENIOREMPLOYEE_H_ 
#include "Employee.h" 

#include <iostream> 
#include <string> 

using namespace std; 

class SeniorEmployee: public Employee { 

public: 

    SeniorEmployee(string EmpName, int EmpID, double EmpSales, double EmpComm, double BaseSalary); 

    void setBaseSalary(double BaseSalary); 

    double getBaseSalary(); 

private: 
    double bsalary; 
}; 


#endif 

ファイルSeniorEmployee.cpp

#include <iostream> 
#include <string> 
#include "SeniorEmployee.h" 

using namespace std; 

SeniorEmployee::SeniorEmployee(string EmpName, int EmpID, double EmpSales, double EmpComm, double BaseSalary) : Employee(name,id,sales,commission) 
{ 
} 

void SeniorEmployee::setBaseSalary(double BaseSalary) { 
    bsalary=BaseSalary; 
} 

double SeniorEmployee::getBaseSalary() { 
    return bsalary; 
} 

ファイルmain.cppに

#include <iostream> 
#include "SeniorEmployee.h" 

using namespace std; 

int main() { 

    string empname = "Fareed Shuja"; 
    int empid = 3978; 
    double empsales = 30.0; 
    double empcomm = 0.99; 
    double basesalary = 50.0; 

    SeniorEmployee emp(empname,empid,empsales,empcomm,basesalary); 

    cout << "Name of the Employee is : " << emp.getName() << endl; 

    cout << "Employee ID is : " << emp.getID() << endl; 

    cout << "Sale Amount is : " << emp.getSales() << endl; 

    cout << "Commission is : " << emp.getComm() << endl; 

    cout << "Earning is : " << emp.earning() << endl; 

    cout << "Employee's base salary is " << emp.getBaseSalary() << endl; 


    return 0; 
} 
+2

なぜあなたは基本クラスの 'private'メンバーにアクセスできるはずだと思いますか?なぜ彼らは「プライベート」なのか? –

+0

私は彼らがプライベートメンバーにアクセスするいくつかのチュートリアルを持っています。このエラーは、SeniorEmployee.cppのこの行によって発生します。 'SeniorEmployee :: SeniorEmployee(string EmpName、int EmpID、double EmpSales、double EmpComm、double BaseSalary):従業員(名前、ID、売上、手数料) { }' –

+0

_私は彼らがプライベートメンバーにアクセスするチュートリアルを持っています_ _チュートリアルは真剣に欠陥があるか間違っていますか、それを誤解しているのか、それともC++のものではありません。 –

答えて

1

SeniorEmployee.cppに次の行が正しくありません:

SeniorEmployee::SeniorEmployee(string EmpName, int EmpID, double EmpSales, double EmpComm, double BaseSalary) : Employee(name,id,sales,commission) 

など、プライベート変数の名前 '、 'ID' にアクセスしようとしています...あなたのコンストラクタの引数を基本クラスのコンストラクタに渡すのではなく、これは、代わりに次のようになります。また

SeniorEmployee::SeniorEmployee(string EmpName, int EmpID, double EmpSales, double EmpComm, double BaseSalary) : Employee(EmpName,EmpID,EmpSales,EmpComm) 

あなたは派生クラスから変数にアクセスしたいが、彼らがprotectedの代わりprivate宣言されなければならないクラスの可視外をしない場合。

+0

ありがとうございました。それは今働く:) –

関連する問題