2009-05-11 2 views
4

ここに私がやろうとしていることがあります:
1)自分の本体にofstreamオブジェクトを開きます。私はこれを問題なく行うことができます。
2)このオブジェクトをファイル名に関連付けます。問題ない。
3)このオブジェクトをクラスに渡し、このクラス内で出力を送信します。私はこれをすることはできません。
ここに私のコードです。助けていただければ幸いです。ありがとう!メインプログラムからクラスへのストリームオブジェクトの受け渡し

#include <fstream> 
#include <iostream> 
using namespace std; 

typedef class Object 
{ 
public: 
Object(ofstream filein); 
} Object; 

Object::Object(ofstream filein) 
{ 
filein << "Success"; 
} 

int main (int argc, char * const argv[]) 
{ 
ofstream outfile; 
outfile.open("../../out.txt"); 

Object o(outfile); 

outfile.close(); 
return 0; 
} 
+0

どのようなエラーが表示されますか?正確には何が起こるのでしょうか? – Andy

+0

ofstreamはコピー不可能なのはなぜですか?どのように達成されますか?コピーコンストラクタはプライベートなのでしょうか? –

答えて

9

あなたは、参照によってストリームオブジェクトを渡す必要があります。

Object::Object(ofstream & filein) 
{ 
filein << "Success"; 
} 

そして、なぜあなたはクラス上のtypedefを使用していますか?それは次のようになります。

class Object 
{ 
    public: 
    Object(ofstream & filein); 
}; 
+0

ありがとうございます!このような簡単な質問をして申し訳ありません。 – banDedo

2

それは、C++では別のオプションを持つことになります0Xことを、言及する価値がある(参照渡し以外またはポインタで):

  1. のstd ::動きを。ストリームはコピー可能ではありませんが、別の場所に移動することができます(ストリームが移動演算子を実装するかどうかによって異なりますが、おそらくそうなります)。
  2. unique_ptr。ストリームはコピーできません。ポインタを使用すると、リソースリークのリスクが発生します。 shared_ptrを使用すると、ストリームをコレクションに格納したい場合や他の場所に不要なコストを組み込むことができます。 Unique_ptrはこれを解決します。ストリームを安全かつ効率的な方法でコレクションに格納することができます。
関連する問題