web-dev-qa-db-ja.com

関数の引数としての「ofstream」

出力ストリームを引数として渡す方法はありますか

void foo (std::ofstream dumFile) {}

私はそれを試しましたが、それは与えました

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

33
Shibli

もちろんあります。参照を使用してください。そのように:

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

そうでない場合、コピーコンストラクターが呼び出されますが、クラスofstreamにはそのような定義はありません。

42
Boris Strandjev

コピーコンストラクタがないため、ostreamオブジェクトへの参照を渡す必要があります。

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

C++ 11準拠のコンパイラと標準ライブラリを使用している場合は、使用しても問題ありません

_void foo(std::ofstream dumFile) {}
_

右辺値で呼び出される限り。 (このような呼び出しはfoo(std::ofstream("dummy.txt"))、またはfoo(std::move(someFileStream))のようになります)。

それ以外の場合は、参照によって渡されるパラメーターを変更し、引数をコピー/移動する必要を回避します。

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