-1

まず第一に、非常に申し訳ありませんが、ソースコードを提供することはできません(とにかく、それは私の母国語です)。したがって、私が行っているのは、(グローバル)関数でifstreamオブジェクトを宣言し、それをクラスのメンバー関数(参照として取得)に送信し、その関数がそれをの別のメンバー関数に渡すことです。前述のクラス内で使用されるクラス(参照としても取得します)。私は、他のクラス内にあるクラス内にあるメンバー関数内の読み取りに使用する際のセグメンテーション違反を特定しました(ああ、なんてことだ...)、eof()を試して、何らかの方法で混乱していないかどうかを確認しました、クラッシュせずに(予想どおり)0を返します。ifstreamオブジェクトを介して入力としてデータを取得しようとした場合にのみクラッシュします。

再帰的な説明/ソースコードの提供がないことをお詫び申し上げます。サポートが必要な場合やご不明な点がございましたら、お問い合わせください。迅速に返信いたします。

4

1 に答える 1

2

まず、大変申し訳ありませんが、ソース コードを提供することはできません (いずれにせよ、私の母国語です)。だから、私がやっていることは、(グローバル)関数でifstreamオブジェクトを宣言し、それをクラスのメンバー関数(参照として取得する)に送信し、その関数がそれを別のメンバー関数に渡すことです。前述のクラス内で使用されるクラス (参照としても取得します)。

したがって、次のようなものです。

class Foo {
public:
    // appropriate constructor here
    std::ifstream &stream;
};

Foo f;
void Func() {
    std::ifstream stream("whatever");
    f.stream = stream;
}

ええ、それは悪いです。ストリームはグローバル関数に対してローカルです。関数がそれへの参照またはポインターを返すと、自動保存期間で保存されるため無効になります。物事を生きたままにしたい場合は、それを動的に割り当てるか(おそらく最適ではありません)、クラス自体の中で構築する必要があります。

于 2012-06-26T22:54:06.860 に答える