Reputation: 18068
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
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
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