7

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;

    }
};
4

2 に答える 2

16

次のような初期化リストを使用します: (最善の方法)

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


    }
};

メンバーとして参照があり、参照をすぐに初期化する必要があります。この表記により、宣言時の初期化が可能になります。代わりに、通常のメンバーを使用せずに使用すると、正常に&機能します。ここで提示されたスタイルはより効率的ですが。

代わりに:(効率の悪いアプローチ)

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;  

    }
};
于 2013-05-19T11:31:28.420 に答える
3

コンストラクターの初期化リストを使用する必要があります

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

あなたのコードから、基本的な C++ の知識が不足していることは明らかですが、それは問題ありませんが、良い本を参照してください。

于 2013-05-19T11:31:07.493 に答える