La bonne réponse est que vous ne l'avez pas écrit un constructeur de copie:
Un constructeur non-modèle pour la classe X est un constructeur de copie si son premier paramètre est soit X&
, const X&
, volatile X&
ou const volatile X&
, et soit il n'y a pas d'autres paramètres, soit tous les autres paramètres ont des arguments par défaut (C++ 03 §12.8/2). Pourquoi l'argument du constructeur de la copie ne peut-il pas être pris en compte par la valeur?
Le constructeur de copie est appelé pour faire des copies des objets de la classe. Une copie doit être faite pour passer un objet par valeur. Si le constructeur de copie pouvait prendre un objet par valeur, vous obtiendriez une récursion infinie en essayant de l'invoquer.
Veuillez donner un exemple de code de ce que vous voulez dire –
Dupliquer: http://stackoverflow.com/questions/2685854/why-should-the-copy-constructor-accept-its-parameter-by-reference-in-c Il veut dire pourquoi le paramètre est une référence. La réponse est bien sûr que si l'argument était en valeur, il devrait être copié. Pour ce faire, vous utilisez un constructeur de copie. Donc, vous devez faire une copie, et ainsi de suite, ad infinitum. – GManNickG
Bah! J'aurais dû savoir que cela avait déjà été demandé. –