Non initialisée membre de référence en C++
J'ai fait la classe en C++ et je voulais qu'il ont un champ Osoba&
mais j'ai une erreur bizarre:
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;
}
};
Vous comprenez ce que les types de référence sont, et quels types de pointeur?
L'erreur est auto-explicatif et devrait être prévu. Vous avez un membre de référence, mais vous n'avez pas initialisé (c'est à dire lié à un objet au moment de la construction) qui est une erreur.
L'erreur est auto-explicatif et devrait être prévu. Vous avez un membre de référence, mais vous n'avez pas initialisé (c'est à dire lié à un objet au moment de la construction) qui est une erreur.
OriginalL'auteur Yoda | 2013-05-19
Vous devez vous connecter pour publier un commentaire.
Utilisation de l'initialisation de la liste comme ceci: (Meilleure approche)
Vous avez une référence en tant que membre et une référence doit être initialisée. Cette notation permet d'initialisation lors de la déclaration. Si vous utilisé un membre normal sans
&
ça marcherait bien, comme vous l'avez fait. Si le style est ici plus efficace.Alternativly: (Moins efficace)
this->stan_konta = stan_konta
Qui ne serait pas nécessaire. Vous pouvez mélanger initalizer listes avec le style old school. Généralement, l'utilisation de la liste d'initialiseur plus efficace.
Comment est-ce que l'OP a écrit à l'origine différente de ce qui est écrit ici? Il semble que de les attribuer manuellement la référence DANS le constructeur, avec
this->wlasciciel = wlasciciel;
, serait également initialiser la construction (déclaration?) temps. N'est-ce pas le but d'un constructeur pour initialiser un objet de variables de membre de droit de suite que la création d'un objet?Dans un monde parfait, peut-être que ce serait le cas. Toutefois, en fonction de C++ l'ordre d'initialisation de la dernière partie de l'initialisation de l'exécution du constructeur (en.cppreference.com/w/cpp/language/initializer_list). D'où les variables sont initialisées avant l'exécution du constructeur. Ce qui signifie dans ce cas "non initialisé" de référence. C'est pourquoi l'initialiseur-liste a été inventé.
OriginalL'auteur CodeTower
Vous devez utiliser le liste d'initialisation du constructeur
Il est évident à partir de votre code que vous n'avez pas beaucoup de base de C++, ce qui est bien, mais s'il vous plaît se référer à un bon livre
OriginalL'auteur Armen Tsirunyan