質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

5回答

2092閲覧

visual studio C++ ifstream ifs() のエラー

bldtemporal

総合スコア35

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/12/20 02:35

double X1,X2,X3;
char c;
ifstream ifs("test1.txt");
ifs >> X1 >> c >> X2 >> c >> X3;

double Y1,Y2,Y3;
char d;
ifstream ifs("test2.txt");
ifs >> Y1 >> d >> Y2 >> d >> Y3;

として、データファイル(複数データ)を複数回入力したいのですが、
「'ifs':再定義されています。2回以上定義されています。」
とエラーメッセージが表示されます。ifstream ifs()による複数回入力はルール違反なのでしょうか、複数回テキストファイルデータを入力するための改善方法がありましたら、お教え頂きますようお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

1つの変数 ifs を使いたいなら、こんな風にも書けます。

C++

1 double X1, X2, X3; 2 char c; 3 ifstream ifs("test1.txt"); 4 ifs >> X1 >> c >> X2 >> c >> X3; 5 ifs.close(); 6 7 double Y1, Y2, Y3; 8 char d; 9 ifs.open("test2.txt"); 10 ifs >> Y1 >> d >> Y2 >> d >> Y3;

投稿2021/12/22 08:31

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ifstream の変数名を、ifs1,ifs2とすることで解決しました。

投稿2021/12/20 03:26

bldtemporal

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

改善方法

C++

1double X1,X2,X3; 2char c; 3{ 4 ifstream ifs("test1.txt"); 5 ifs >> X1 >> c >> X2 >> c >> X3; 6} 7 8double Y1,Y2,Y3; 9char d; 10{ 11 ifstream ifs("test2.txt"); 12 ifs >> Y1 >> d >> Y2 >> d >> Y3; 13}

投稿2021/12/20 02:56

編集2021/12/20 02:57
fana

総合スコア11632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/12/20 03:40 編集

ほほう,無視か. 同一スコープ内で名前が衝突していること だけでなく, 不必要に長くファイルをオープンし続けていることも改善される方法を示したつもりであったのだが. (これなら「別の名前」を考える手間もない)
episteme

2021/12/20 08:27

僕もこっち。複数のファイルが同時に開いてる必要が無いのなら。
bldtemporal

2021/12/22 02:34

fana様、別の名前を付けて解決してしまいましたが、確かに名前が同じできる、この方法はスマートだと思います。今は練習のモデル計算で読み込む入力ファイル数は少ないのですが、本番では、多くなります(10個以上)ので、ご教示の方法で実施することにします。有難うございました。
guest

0

ベストアンサー

同じ名前で再定義できない、って話なので、名前変えましょう

投稿2021/12/20 02:39

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bldtemporal

2021/12/20 02:55

y_waiwai様、 度々のご回答有難うございます。test1,test2と変えたのですが、それでは駄目でしょうか、それとも、他のところでしょうか
y_waiwai

2021/12/20 03:03

ファイル名じゃなく、ifs のほうです ifs ってのは変数名です
y_waiwai

2021/12/20 03:05

doubleとcharの変数名は変えてるのに、 なんでifstreamの変数名は変えてないの?ってはなしです
bldtemporal

2021/12/20 03:07

y_waiwai様、エラーメッセージは、 「'ifs':再定義されています。2回以上初期化されています。」でした
bldtemporal

2021/12/20 03:18

y_waiwai様、ほんとにプリミテブな質問で申し訳ありませんでした。ifs1,ifs2としてみたところ、実行できました。"fstream ifs"でコマンドになっていると思ってしまいました。
guest

0

1つのブロックに同一名の変数が2つあるというだけなので、どちらかの変数名を変えましょう。

C++の入門書を読んだほうがよいと思います。

投稿2021/12/20 02:39

int32_t

総合スコア20659

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bldtemporal

2021/12/20 03:01

int32_t 様、早速のご回答有難うござます。変数名を、test1,test2としたのですが、これでは変えたことにならないでしょうか、それとも他のところを変えるのでしょうか、私の酔いした入門書には、単一入力の場合は載っていますが、複数入力の方法は載っていませんでした。追って別の本を探してみます。
int32_t

2021/12/20 03:07

コンパイルができて期待どおり動くのならそれで良いです。
bldtemporal

2021/12/20 03:10

int32_t様、申し訳ありません。エラーメッセージは 「'ifs':再定義されています。2回以上初期化されています。」でした。
int32_t

2021/12/20 03:18

変数名 ifs を変更したのではないのですか? ifstream ifs2("test2.txt"); ifs2 >> Y1 >> d >> Y2 >> d >> Y3; のような感じですよ。
bldtemporal

2021/12/20 03:24

int32_t様、有難うございます。y_waiwai様にお礼申し上げましたが、ifs1,ifs2とすることでコンパイルでき、実行もできました。入門書をよんでいるのですが、どうも良く分かりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問