for文を利用した配列のエラー – プログラミング – Home

for文を利用した配列のエラー
 
通知
すべてクリア

[解決済] for文を利用した配列のエラー


ty
 ty
(@ty)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

for(i=0; i<n; i++){
ofstream out[i](i,ios::out);
}

とすると、

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

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

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


引用未解決
トピックタグ
iijima
 iijima
(@iijima)
ゲスト
結合: 21年前
投稿: 44
 

こういうことをなさりたいのですか?

// 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
 tib
(@tib)
ゲスト
結合: 22年前
投稿: 468
 

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

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


返信引用
ty
 ty
(@ty)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

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


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070010.txt
と非常に似てますけど?


返信引用
ty
 ty
(@ty)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

>>tibさん
返答ありがとうございます。

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


返信引用
iijima
 iijima
(@iijima)
ゲスト
結合: 21年前
投稿: 44
 

new演算子で配列を動的に確保すれば良いのでは。

// exam.
int n;

// nに値を設定

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

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


返信引用
ty
 ty
(@ty)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

>>iijimaさん
ありがとうございます。
こちらで続けさせてもらおうと思います。

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


返信引用
iijima
 iijima
(@iijima)
ゲスト
結合: 21年前
投稿: 44
 

もしかしたら、ofstreamオブジェクトの配列を用意しなくてもできる処理じゃないかな
ぁ。

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> もしかしたら、ofstreamオブジェクトの配列を用意しなくてもできる処理じゃないかなぁ。

そーかも。

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


返信引用
ty
 ty
(@ty)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> std::ofstream out( xxx ); // xxxはi番目のファイル名
> のxxxのところを配列などでi番目のファイル名を作ろうとするんですが、
> うまくできません(TT)

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

すでにヒントは出ているような...
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070010.txt


返信引用
ty
 ty
(@ty)
ゲスト
結合: 21年前
投稿: 16
 

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました