błąd zgodności typów

0

Witam,

Plik nagłówkowy

#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
#include <cstring>
#include <string>
#include <iostream>
using namespace std;
class rachunek_bankowy
{
    private:
    string nazwisko;
    string nr_konta;
    double saldo;
    public:
    ~rachunek_bankowy(){};
    rachunek_bankowy();
    rachunek_bankowy (string & n,string & nr, double s=0.0);
    void show();
    void przyjmowanie (double s);
    void wydawanie (double s);
};
#endif // HEAD_H_INCLUDED

Plik definicji funkcji

#include "head.h"
#include <cstring>
#include <string>
using namespace std;
rachunek_bankowy::rachunek_bankowy()
{

}
rachunek_bankowy::rachunek_bankowy(string & n,string & nr, double s)
{
nazwisko=n;
nr_konta=nr;
saldo=s;
}
void rachunek_bankowy::show()
{
cout << nazwisko << endl << nr_konta << endl << saldo;
}
void rachunek_bankowy::przyjmowanie (double s)
{
saldo+=s;
}
void rachunek_bankowy::wydawanie (double s)
{
saldo-=s;
}

Plik main

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

int main()
{
    rachunek_bankowy kowalski ("Kowalski","12345",);
    kowalski.show();
    return 0;
}

Niestety po skompilowaniu wyskakuje błąd error: expected primary-expression before ')' token. Odnoszący się do braku domyślnej wartości zdefiniowanej w pliku nagłówkowym.

Po zastąpieniu domyślnej wartości, wartością liczbową błąd znika, jednak pojawia się kolejny: no matching function for call to 'rachunek_bankowy::rachunek_bankowy(const char [9], const char [6], double)

Program działa jedynie po zdefiniowaniu zmiennych string i wprowadzeniu tych zmiennych jako argumentów funkcji. Dodatkowo nie działa bez zdefiniowania wartości domyślnej.

Prosiłbym o wskazówki jak rozwiązać te problemy.

Z góry dziękuję :)

1
  1. Konstruktor powinien mieć: const string& . Do niego jest konwersja ze c-stringa.
  2. Wpisanie w nagłówku: using namespace std; to ... przestępstwo karane 3x dożywociem i pracą przy 20 letnim kodzie... Proszę, nie rób tego...
  3. Trochę namieszałeś z nagłówkami. Tam gdzie powinny być, nie ma a gdzie nie są potrzebne, występują.
  4. Brakowało Ci const'a przy show().

Logiki tego co robisz nie analizowałem bo mam wrażenie że to jest jeszcze "rozgrzebany problem"...

#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
#include <string>

class rachunek_bankowy
{
    private:
    std::string nazwisko;
    std::string nr_konta;
    double saldo;
    public:
    ~rachunek_bankowy(){};
    rachunek_bankowy();
    rachunek_bankowy (const std::string & n, const std::string & nr, double s=0.0);
    void show() const;
    void przyjmowanie (double s);
    void wydawanie (double s);
};

#endif // HEAD_H_INCLUDED 
#include "head.h"
#include <iostream>

using namespace std;

rachunek_bankowy::rachunek_bankowy() {
}

rachunek_bankowy::rachunek_bankowy(const string & n,const string & nr, double s) {
    nazwisko=n;
    nr_konta=nr;
    saldo=s;
}

void rachunek_bankowy::show() const {
    cout << nazwisko << endl << nr_konta << endl << saldo;
}

void rachunek_bankowy::przyjmowanie (double s) {
    saldo+=s;
}

void rachunek_bankowy::wydawanie (double s) {
    saldo-=s;
} 
#include <iostream>
#include "head.h"

using namespace std;

int main()
{
    rachunek_bankowy kowalski ("Kowalski", "12345");
    kowalski.show();
    return 0;
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1