我已经用C ++编写了类,我希望它有一个字段Osoba&
,但我得到一个奇怪的错误:
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;
}
};
答案 0 :(得分:9)
使用这样的初始化列表:(最佳方法)
class Rachunek{
public:
Osoba& wlasciciel;
double stan_konta;
Rachunek(Osoba* wlasciciel, double stan_konta):
wlasciciel(*wlasciciel) ,
stan_konta(stan_konta) { //Uninitialized reference member
}
};
您有作为成员的引用,必须立即初始化引用。此表示法允许在声明时进行初始化。如果您改为使用没有&
的普通成员,那么它就可以正常工作了。虽然这里呈现的风格更有效。
Alternativly :(效率较低的方法)
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;
}
};
答案 1 :(得分:2)
您需要使用constructor initialization list
Rachunek(Osoba* wlasciciel, double stan_konta)
:wlasciciel (*wlasciciel)
,stan_konta (stan_konta)
{
}
从你的代码中很明显你缺乏很多基本的C ++知识,这很好,但请参考a good book