C ++中未初始化的引用成员

时间:2013-05-19 11:29:35

标签: c++ constructor

我已经用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;

    }
};

2 个答案:

答案 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