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;
}
};
Now as we know reference variable needs to be initialized at the same step so it will pop up an error message called “reference member is not initialized” .
To initialize the const value using constructor, we have to use the initialize list. This initializer list is used to initialize the data member of a class. The list of members, that will be initialized, will be present after the constructor after colon. members will be separated using comma.
No, references cannot be NULL in C++. Possible solutions include: using a pointer instead of a reference. having a dummy Object instance that can be used to indicate "no object".
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;
}
};
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With