2017-01-09 70 views
0

我是OOP的初學者,並且對構造函數的定義有問題。 headfile.h:[C++]構造函數不檢測組件

#ifndef RACHUNEK_H_INCLUDED 
#define RACHUNEK_H_INCLUDED 

#include <string> 
class Rachunek 
{ 
    std::string surname; 
    std::string nr_account; 
    double balance; 
public: 
    Rachunek(); 
    Rachunek(std::string & name,std::string & nr,double s = 0.0); 
    ~Rachunek(){}; 
    void show(); 
    void give(const double m); 
    void get(const double m); 

}; 

#endif // RACHUNEK_H_INCLUDED 

文件的.cpp:

#include <iostream> 
#include <string> 
#include "rachunek.h" 
using namespace std; 

Rachunek::Rachunek() //default 
{ 
    surname = "not specified"; 
    nr_account = "0000-0000-0000-0000"; 
    balance = 0.0; 
} 
Rachunek::Rachunek(string & name, string & nr, double s = 0.0) //mysecond 
{ 
    surname = name; 
    nr_account = nr; 
    balance = s; 
} 

問題是一個構造函數的定義。我不知道什麼是錯...

+0

什麼是你得到的錯誤? –

+0

好的。錯誤是在定義賦值:我一直在尋找這個很長的時間 – Emilo

+1

除了編譯錯誤,你永遠不會使用浮點的銀行賬戶餘額。這使審計人員對四捨五入的錯誤感到厭煩。而是使用美分並將輸出固定爲顯示2位小數。此外,您永遠無法創建具有初始非零餘額的帳戶。資金必須始終從其他賬戶轉移。 (是的,我正在爲一家銀行工作:-) –

回答

2

問題是構造函數的定義。我不知道什麼是錯...

您不允許在函數的定義中使用默認值。默認值只允許在聲明中使用。使用:

Rachunek::Rachunek(string & name, string & nr, double s) : 
    surname(name), 
    nr_account(nr), 
    balance(s) 
{ 
} 

我建議更改其他構造函數的實現,以使用初始化程序列表語法初始化成員變量。

Rachunek::Rachunek() : 
    surname("not specified"), 
    nr_account("0000-0000-0000-0000"), 
    balance(0.0) 
{ 
} 

如果你能使用C++編譯器11可以通過使用委託構造進一步簡化。

Rachunek::Rachunek() : Rachunek("not specified", "0000-0000-0000-0000", 0.0) 
{ 
}