Ответ 1
Конечно, есть. Просто используйте ссылку. Например:
void foo (std::ofstream& dumFile) {}
В противном случае будет вызываться конструктор копирования, но для класса ofstream
такого не существует.
Есть ли способ передать выходной поток в качестве аргумента, например
void foo (std::ofstream dumFile) {}
Я пробовал это, но он дал
error : class "std::basic_ofstream<char, std::char_traits<char>>" has no suitable copy constructor
Конечно, есть. Просто используйте ссылку. Например:
void foo (std::ofstream& dumFile) {}
В противном случае будет вызываться конструктор копирования, но для класса ofstream
такого не существует.
Вам нужно передать ссылку на объект ostream
, поскольку он не имеет конструктора копирования:
void foo (std::ostream& dumFile) {}
Если вы используете совместимый компилятор С++ 11 и стандартную библиотеку, должно быть удобно использовать
void foo(std::ofstream dumFile) {}
пока он вызывается с rvalue. (Такие вызовы будут выглядеть как foo(std::ofstream("dummy.txt"))
или foo(std::move(someFileStream))
).
В противном случае измените параметр, который нужно передать по ссылке, и избегайте необходимости копировать/перемещать аргумент:
void foo(std::ofstream& dumFile) {}