for文を利用した配列のエラー

[戻る]
ty 2005/07/05(火) 19:40:56
for(i=0; i<n; i++){
    ofstream out[i](i,ios::out);
}

とすると、

 定数式が必要です。
 配列の初期化には中カッコ ({}) が必要です。
 サイズが 0 の配列を割当てまたは宣言しようとしました。

とエラー表示されてしまいます。
色々なサイト、参考書を見てもエラーが改善できませんでした。

どのようにしたら良いですか?
またこのような文は作ることができないのでしょうか??
よろしくお願いします。

iijima 2005/07/05(火) 20:46:07
こういうことをなさりたいのですか?

    // exam.
    // ファイルストリームオブジェクトの配列を定義し、
    // 要素ごとにそれぞれ異なるファイル名のファイルを開く

    const int SIZE = 3;
    std::ofstream out[SIZE];
    const char* files[SIZE] = { "f0.txt", "f1.txt", "f2.txt" };

    for( int i = 0; i < SIZE; ++i ){
        out[i].open( files[i] );
    }

tib 2005/07/05(火) 20:49:01
定数式が必要です。
→配列を宣言するなら「要素はいくつですよ」と明言しなくてはなりません。
 n個分のofstreamから成る配列なら「ofstream out[n];」というようにしてください。
 →このときの「n」はconst int型か、#define した数値か、数値そのもの。

ココを直せば、他の2つのエラーも取れるでしょう。

ty 2005/07/05(火) 20:58:03
>>iijimaさん
はい。そのようにしたいと思っています。
でも、iijimaさんのは3つに制限されていますが、
私は3つとか制限しないでキー入力された数(n個)によってファイルを開こうと思ってい
ます。
どのようにしたら無制限にできるでしょうか???
よろしくお願いします。

wood 2005/07/05(火) 21:05:56
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070010.txt
と非常に似てますけど?

ty 2005/07/05(火) 21:07:02
>>tibさん
返答ありがとうございます。

そのときのnをキー入力された数というのはやはりできないのでしょうか??

iijima 2005/07/05(火) 21:17:55
new演算子で配列を動的に確保すれば良いのでは。

    // exam.
    int n;

    // nに値を設定

    std::ofstream* out = new std::ofstream[n];
    ...
    delete[] out; // メモリ解放を忘れずに!

# こっちの掲示板で続けるのならば、現状をあっちで報告したうえで、
# マルチポスト状態を解消してください。

ty 2005/07/05(火) 21:47:38
>>iijimaさん
ありがとうございます。
こちらで続けさせてもらおうと思います。

とりあえずnew演算子で挑戦してみたいと思います。

iijima 2005/07/05(火) 22:05:28
もしかしたら、ofstreamオブジェクトの配列を用意しなくてもできる処理じゃないかな
ぁ。

    // exam.
    std::ofstream out;
    for( int i = 0; i < n; ++i ){
        out.open( xxx ); // xxxはi番目のファイル名
        // i番目のデータをxxxファイルに出力
        out.close();
    }

επιστημη 2005/07/06(水) 10:40:43
> もしかしたら、ofstreamオブジェクトの配列を用意しなくてもできる処理じゃないかなぁ。

そーかも。

for( int i = 0; i < n; ++i ){
  std::ofstream out( xxx ); // xxxはi番目のファイル名
  // i番目のデータをxxxファイルに出力
}

ty 2005/07/06(水) 14:58:08
お返事ありがとうございます!!
iijimaさん、επιστημηさんのおっしゃったとおりにしたら、エラーが減りました!
ただ、
std::ofstream out( xxx ); // xxxはi番目のファイル名
のxxxのところを配列などでi番目のファイル名を作ろうとするんですが、
うまくできません(TT)
どのようにしたら良いのでしょうか?
たびたび色々なことを聞いて申し訳ないです。m(__)m

επιστημη 2005/07/06(水) 15:17:51
> std::ofstream out( xxx ); // xxxはi番目のファイル名
> のxxxのところを配列などでi番目のファイル名を作ろうとするんですが、
> うまくできません(TT)

どんなファイル名を生成したいかを述べずにただ'うまくできません'と泣き言垂れても
何の手助けもできません。

dairygoods 2005/07/07(木) 16:12:05
すでにヒントは出ているような...
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070010.txt

ty 2005/07/07(木) 20:30:24
[[解決]]
すみません。自分でも何をどうしたら良いか分からなくて、、、
それから自分でも試行錯誤を繰り返し、
少し妥協はしましたが、自力でなんとかすることが出来ました。
みなさん色々助けていただいてアリガトウございましたm(__)m

古いスレッドには追加発言できません。