2017-01-09 3 views
0

Я новичок в ООП, и у меня проблема с определением конструктора. 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() : 
    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) 
{ 
}