«ofstream» как аргумент функции - PullRequest
30 голосов
/ 12 марта 2012

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

void foo (std::ofstream dumFile) {}

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

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

Ответы [ 3 ]

39 голосов
/ 12 марта 2012

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

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

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

такого определения не существует.
8 голосов
/ 12 марта 2012

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

void foo (std::ostream& dumFile) {}
6 голосов
/ 12 марта 2012

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

void foo(std::ofstream dumFile) {}

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

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

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