2013-01-11 95 views
0

我一直在研究這段代碼很久,現在我已經發布了它,但之後解決了這個問題後又出現了另一個問題,於是我創建了一個新的帖子,其中包含這個問題的名稱。好的問題是,我顯然沒有以正確的方式將變量傳遞給Administrator類。我已經嘗試了兩種方式這是我所有的書節目,既給了我,說錯誤C2512錯誤:「SalariedEmployee」:沒有可用的適當的默認構造函數」我已經嘗試了如何將變量傳遞給一個類

//Lynette Wilkins 
//Week 12 

#include <iostream> 
#include <cstdlib> 
#include <string> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

class SalariedEmployee 
{ 
private: 
    double wageRate; 
    int hours; 
protected: 
    string name; 
    string ssn; 
    double netPay; 
    string department; 

public: 
    SalariedEmployee(string n, string s, double np, double w, int h, string d); 
    ~SalariedEmployee() {cout<<endl;} 
    string Getname(); //returns name 
    string Getssn(); // returns social security number 
    double GetnetPay(); //returns netPay 
    string Getdepartment(); // returns department 
    double GetwageRate(); //returns wage rate 
    int Gethours(); //returns hours 
    void Setname(string); //sets name 
    void Setssn(string); //sets ssn 
    void SetnetPay(double); //sets net pay 
    void Setdepartment(string); //sets department 
    void SetwageRate(double); //sets wage rate 
    void Sethours(int); //sets hours 

}; 

SalariedEmployee::SalariedEmployee(string n, string s, double np, double w, int h, string d) : name(n), 
     ssn(s), 
     netPay(np), 
     wageRate(w), 
     hours(h), 
     department(d) 
{} 


string SalariedEmployee::Getname() 
{ 
    return name; 
} 

string SalariedEmployee::Getssn() 
{ 
    return ssn; 
} 

double SalariedEmployee::GetnetPay() 
{ 
    return netPay; 
} 

double SalariedEmployee::GetwageRate() 
{ 
    return wageRate; 
} 

int SalariedEmployee::Gethours() 
{ 
    return hours; 
} 
void SalariedEmployee::Setname(string n) 
{ 
    name = n; 

} 

void SalariedEmployee::Setssn(string s) 
{ 
    ssn = s; 
} 

void SalariedEmployee::SetnetPay(double np) 
{ 
    netPay = np; 
} 

void SalariedEmployee::Setdepartment(string d) 
{ 
    department = d; 
} 


void SalariedEmployee::SetwageRate(double w) 
{ 
    wageRate = w; 
} 

void SalariedEmployee::Sethours(int h) 
{ 
    hours = h; 
} 


class Administrator : public SalariedEmployee 
{ 
protected: 
    string title; 
    string responsi; 
    string super; 
    double salary; 
public: 
    Administrator(string t, string r, string s, double sa); 
    ~Administrator(); 
    string Gettitle(); 
    string Getresponsi(); 
    string Getsuper(); 
    double Getsalary(); 
    void Settitle(string); 
    void Setresponsi(string); 
    void Setsuper(string); 
    void Setsalary(double); 
    void print(); 
}; 


Administrator::Administrator(string t, string r, string s, double sa) : title(t), responsi(r), super(s), salary(sa) 
{ 
} 

Administrator::~Administrator() 
{ 
    cout<<endl; 
} 

string Administrator::Gettitle() 
{ 
    return title; 
} 

string Administrator::Getresponsi() 
{ 
    return responsi; 
} 

string Administrator::Getsuper() 
{ 
    return super; 
} 

double Administrator::Getsalary() 
{ 
    return salary; 
} 
void Administrator::Settitle(string ti) 
{ 
    title = ti; 
} 
void Administrator::Setresponsi(string re) 
{ 
    responsi = re; 
} 


void Administrator::Setsuper(string su) 
{ 
    super=su; 
} 

void Administrator::Setsalary(double sa) 
{ 
    salary= sa; 
} 

void Administrator::print() 
    { 

    cout << "\n_______________________________________________\n"; 

    cout << "Pay to the order of " << name<< endl; 
    cout << "The sum of " << netPay << " Dollars\n"; 
    cout << "_________________________________________________\n"; 
    cout <<endl<<endl; 
    cout << "Employee Number: " << ssn << endl; 
    cout << "Salaried Employee. Regular Pay: " 
     << salary << endl; 
    cout << "_________________________________________________\n"; 
    } 





int main() 
{ 


    string name; 
    string soc; 
    double net = 0; 
    double wage = 0; 
    int hrs = 0; 
    string dept; 
    string admtitle; 
    string resp; 
    string sup; 
    double sal = 0; 
    int response = 0; 

    string date = "January 12, 2013"; 


    cout<<setprecision(2) 
    <<setiosflags(ios::fixed) 
    <<setiosflags(ios::showpoint); 

    SalariedEmployee emp1(name, soc,net, wage, hrs, dept); 
    Administrator adm1(admtitle, resp, sup, sal); 


while(response != 4){ 

    cout<<"Employee and Administrator Salary Program "<<endl; 
    cout<<"(You will have to enter data first before you do anything else)"<<endl<<endl; 
    cout<<"Enter Employee Data, Enter 1"<<endl; 
    cout<<"Change data, Enter 2"<<endl; 
    cout<<"Print Check, Enter 3"<<endl; 
    cout<<"End Program, Enter 4"<<endl<<endl; 
    cout<<"Please make your selection"<<endl; 



cin>> response; 

    switch (response) 


    { 
    case 1: 
     cout <<"The employee's data will be entered here: "<<endl<<endl; 

     cout<<"Enter the employees name: "; 
     cin.ignore(); 
     getline(cin, name); 

     cout<<"Enter the employees social security number: "; 
     cin.ignore(); 
     getline(cin, soc); 

     cout<<"Enter the employees net pay: "; 
     cin>>net; 

     cout<<"Enter the employees wage rate: "; 
     cin>>wage; 

     cout<<"Enter the number of hours the employer worked: "; 
     cin>>hrs; 

     cout<<"Enter the employees title: "; 
     cin.ignore(); 
     getline(cin,admtitle); 

     cout<<"Enter the employees area responsibility: "; 
     cin.ignore(); 
     getline(cin, resp); 

     cout<<"Enter the employees salary: "; 
     cin>>sal; 



     cout<<endl<<endl<<endl; 


     break; 




    case 2: 

     cout<<"Please change the data you entered previously here. " <<endl<<endl; 

     cout<<"Enter the employees name: "; 
     cin.ignore(); 
     getline(cin, name); 

     cout<<"Enter the employees social security number: "; 
     cin.ignore(); 
     getline(cin, soc); 

     cout<<"Enter the employees net pay: "; 
     cin>>net; 

     cout<<"Enter the employees wage rate: "; 
     cin>>wage; 

     cout<<"Enter the number of hours the employer worked: "; 
     cin>>hrs; 

     cout<<"Enter the employees title: "; 
     cin.ignore(); 
     getline(cin,admtitle); 

     cout<<"Enter the employees area responsibility: "; 
     cin.ignore(); 
     getline(cin, resp); 

     cout<<"Enter the employees salary: "; 
     cin>>sal; 



     cout<<endl<<endl<<endl; 
break; 



    case 3: 

     cout <<"Information Printed"<<endl<<endl; 

     cout<<"_____________________________"<<date<<endl; 
     &Administrator::print; 



     break; 


    default: 

     cout<<endl<<endl 
      <<"Invalid Selection! Try Again"<<endl; 
     exit(1); 

} 
} 





    system("PAUSE"); 
    return 0; 
} 

回答

2

Administrator(string t, string r, string s, double sa);將嘗試調用基類的默認構造函數,如果你沒有指定其他。(默認構造函數是一個可以不帶任何參數調用)

基類沒有默認構造函數,ERGO錯誤。

調用基類的另一個構造函數:

Administrator::Administrator(string t, string r, string s, double sa) : 
SalariedEmployee(<args>), //base constructor call 
title(t), responsi(r), super(s), salary(sa) //members 
{ 
} 
+0

OK !!所以你在哪裏()在這裏傳遞什麼參數? –

+0

@CarlaBridges威爾金斯是邏輯的一部分。我指出了這個錯誤,不能幫助你理解邏輯。想想看。管理員是SalariedEmployee,ergo具有其所有屬性。管理員的名字是什麼,當你創建它爲管理員adm1(admtitle,resp,sup,sal);'? (我的猜測是你必須添加更多的參數到'管理員'的構造函數來容納那些基類' –

+0

好吧,我會試圖找出這 –

相關問題