Подтвердить что ты не робот

"ofstream" в качестве аргумента функции

Есть ли способ передать выходной поток в качестве аргумента, например

void foo (std::ofstream dumFile) {}

Я пробовал это, но он дал

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

4b9b3361

Ответ 1

Конечно, есть. Просто используйте ссылку. Например:

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

В противном случае будет вызываться конструктор копирования, но для класса ofstream такого не существует.

Ответ 2

Вам нужно передать ссылку на объект ostream, поскольку он не имеет конструктора копирования:

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

Ответ 3

Если вы используете совместимый компилятор С++ 11 и стандартную библиотеку, должно быть удобно использовать

void foo(std::ofstream dumFile) {}

пока он вызывается с rvalue. (Такие вызовы будут выглядеть как foo(std::ofstream("dummy.txt")) или foo(std::move(someFileStream))).

В противном случае измените параметр, который нужно передать по ссылке, и избегайте необходимости копировать/перемещать аргумент:

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