appel a fonction avec arguement type ifstream

appel a fonction avec arguement type ifstream

par 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

par 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

par 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