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

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

void foo (std::ofstream dumFile) {}

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

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

3 ответов


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

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

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


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

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

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

void foo(std::ofstream dumFile) {}

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

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

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