web-dev-qa-db-fra.com

"ofstream" comme argument de fonction

Existe-t-il un moyen de passer le flux de sortie comme argument comme

void foo (std::ofstream dumFile) {}

J'ai essayé mais ça a donné

error : class "std::basic_ofstream<char, std::char_traits<char>>" has no suitable copy constructor

33
Shibli

Bien sûr que oui. Utilisez simplement la référence. Comme ça:

void foo (std::ofstream& dumFile) {}

Sinon, le constructeur de copie sera appelé, mais il n'y a pas de tel défini pour la classe ofstream.

42
Boris Strandjev

Vous devez passer une référence à l'objet ostream car il n'a pas de constructeur de copie:

void foo (std::ostream& dumFile) {}
8
Joel Falcou

Si vous utilisez un compilateur conforme C++ 11 et une bibliothèque standard, il devrait être correct d'utiliser

void foo(std::ofstream dumFile) {}

tant qu'il est appelé avec une valeur r. (De tels appels ressembleront à foo(std::ofstream("dummy.txt")) ou foo(std::move(someFileStream))).

Sinon, modifiez le paramètre à transmettre par référence et évitez de copier/déplacer l'argument:

void foo(std::ofstream& dumFile) {}
6
Mankarse