Yoda
Yoda

Reputation: 18068

Uninitialized reference member in C++

I have made class in C++ and I wanted it to have a field Osoba& but I get an weird error:

class Rachunek{
public:
    Osoba& wlasciciel;
    double stan_konta;
    Rachunek(Osoba* wlasciciel, double stan_konta){ //Uninitialized reference member
        this->wlasciciel = wlasciciel;
        this->stan_konta = stan_konta;

    }
};

Upvotes: 7

Views: 27903

Answers (2)

CodeTower
CodeTower

Reputation: 6333

Use initializing list like this: (Best approach)

class Rachunek{
public:
    Osoba& wlasciciel;
    double stan_konta;
    Rachunek(Osoba* wlasciciel, double stan_konta): 
        wlasciciel(*wlasciciel) , 
        stan_konta(stan_konta)  { //Uninitialized reference member


    }
};

You have a reference as a member and a reference must be initialized right away. This notation allows for initialization at declaration time. If you instead used a normal member without & it would work fine as you did it. Though the presented style here is more efficient.

Alternativly: (Lesser efficient approach)

class Rachunek{
public:
    Osoba wlasciciel; // Note missing & on the type. 
    double stan_konta;
    Rachunek(Osoba* wlasciciel, double stan_konta)
    {
        this->wlasciciel = *wlasciciel;  
        this->stan_konta = stan_konta;  

    }
};

Upvotes: 16

Armen Tsirunyan
Armen Tsirunyan

Reputation: 133014

You need to use the constructor initialization list

Rachunek(Osoba* wlasciciel, double stan_konta)
      :wlasciciel (*wlasciciel)
      ,stan_konta (stan_konta)
{ 
}

It is obvious from your code that you lack a lot of basic C++ knowledge, which is fine, but please do refer to a good book

Upvotes: 2

Related Questions