1

プライベートofstreamを宣言しようとすると、「未定義の型の使用が無効です」というエラーが発生する1つの.hファイル以外で動作している大きなプログラムがあります。Eclipseでは、外部オケーション/user/include/c++/4.1.2/iosfwdを使用した「structstd :: ofstreamの宣言」に関するエラーも発生します(私はチェックしました。これは、ofstreamを定義する行/場所です)。iostreamとfstreamの両方を含めました。

ifstreamまたはfstreamを使用するように宣言を変更しようとすると、同じエラーが発生しますが、使用しようとしたオブジェクトタイプの宣言でエラーが発生するのは今だけです。

物事をさらに煩わしくするために、私はプログラムの他の場所でfstreamとifstreamsを使用します。ある時点で、私は十分に憤慨し、ifstreamを使用して有効な.hファイルの全内容を.hファイルにコピーしてエラーを出しました...そして同じエラーが発生しました。唯一の変更がファイルの名前とif_defマクロである場合に、あるファイルで有効なコードが別のファイルで無効になる理由がわかりません。2つの.hファイルは同じディレクトリにあります。

確認するコードを投稿できず、申し訳ありません。別のコンピューターで作成されており、コンピューターAからコンピューターBにコードを転送する方法はありません(インターネットアクセスもありません)。しかし、コードを表示せずにテストするためにこのエラーが発生する理由について提案をいただければ幸いです。

編集:もう少し遊んだ後、CPPファイルから.Hファイルを削除するとエラーが消えることを学びます。したがって、ファイルの名前がVectorOutput.hの場合。VectorOutput.cppから#includeを削除すると、他のファイルに含めても、eclipseは文句を言いません。VectorOutput.cppの名前をなんらかの方法で変更すると、エラーもなくなります。それは...奇妙です。それが何を意味するのか私にはわかりません。ファイルの名前と特定の場所は、私が知る限り何の意味もありません。ファイルの名前を変更することで、今のところ問題を取り除くことができましたが、誰かが推測している場合は、彼の根本的な原因を知ることができます。

4

1 に答える 1

1

先に進むことはほとんどありません。名前空間を確認します。プレフィックスstd::を使用してタイプを正しく宣言していることを確認してください。

編集:実際、ヘッダーでofstreamを使用している場合(そして、メンバーとして宣言しているため)、fstreamヘッダーを含める必要があります。iosfwdは、型を前方宣言する場合にのみ有効です。

于 2012-06-19T14:29:27.100 に答える