appel a fonction avec arguement type ifstream

appel a fonction avec arguement type ifstream

by Simon Rumley -
Number of replies: 2

Mon problème est que je n'arrive pas à transmetre ma variable "fichier" de type ifstream à mon fichier simulation.cc/h par la fonction sim_lecture. (voir pièce jointe)


Mon fichier simulation.h contient le prototype suivant :

void sim_lecture(std::ifstream fichier);

et mon fichier simulation.cc defini cette fonction.


Lorsque je compile fichier.cc il n'y a aucune erreur.

Lorsque je fais un make dans le terminal, plusieurs erreurs apparaissent. Voyez vous d'ou pourrait venir cette erreur?


Merci d'avance de votre aide.

Attachment Screenshot from 2019-03-15 22-28-28.png
In reply to Simon Rumley

Re: appel a fonction avec arguement type ifstream

by Nicolas Antoine Henri Marie Bouron -

Bonsoir,


il est écrit dans les messages du compilateur la ligne suivante :


basic_ifstream(const basic_ifstream&)  =  delete;


Cela signifie qu'il est impossible de passer une instance de la classe ifstream par valeur, comme vous l'avez fait dans les paramètres de votre fonction sim_lecture, d'où l'erreur.

Une solution consisterait à passer votre fichier par référence dans les paramètres de votre fonction sim_lecture.

Ou alors on peut toujours créer un pointeur de type ifstream* vers votre instance fichier, il suffirait alors de mettre ce type de pointeur en paramètre dans votre fonction et utiliser -> au lieu de . pour accéder aux méthodes de fichier.

Personnellement j'opterai pour le passage par référence.


Cordialement

In reply to Nicolas Antoine Henri Marie Bouron

Re: appel a fonction avec arguement type ifstream

by Ronan Boulic -

en complément, la donnée indique que c'est le module de simulation qui ouvre le flot, pas main().

main passe le nom de fichier en paramètre à une fonction ou méthode de simulation.

Concernant ifstream le cours a souligné qu'on ne peut pas passer un flot par valeur, seulement par référence