0

以下は分数クラスのクライアント プログラムの一部です。クラスを作成し、指定されたクライアント プログラムでテストしています。実行しようとすると、次のエラーが発生します。

アサーション'in'に失敗しました。

コード:

bool eof(ifstream& in);

cout << "\n----- Now reading Fractions from file\n";
ifstream in("fraction.data");
assert(in);
while (!eof(in)) {
    Fraction f;
    if (in.peek() == '#') {
        in.ignore(128, '\n');                    //skip this line, it's a comment
    } else {
        in >> f;
        cout << "Read fraction = " << f << endl;
    }

C++ の比較的初心者として、コードのこの部分が何をしているのかよくわかりません。

ifstream in("fraction.data");
assert(in);

そして、デバッグしようとしてその時点に到達すると、次のように表示されます。

利用可能なソースがありません"__kernel_vsyscall() at 0x12e416"

ええ、結論として、私はなぜこれが起こっているのかについてかなり無知です:P

編集:ここにインクルードステートメントがあります

#include <iostream>
#include "fraction.h"
#include <fstream>
#include <cassert>
using namespace std;
4

3 に答える 3

2

式が false と評価されると、assert() は失敗します。

assert(in)

in (入力ファイル) が false と評価されるため失敗します。あなたのコードは「fraction.data」というファイルを開くことができません。in が有効な入力ファイル ストリームである場合、assert(in) はパスし、ビジネスを続行します。

短い答え - >「ファイルが見つかりません」または「ここにファイルを作成できません」。

于 2011-10-05T20:20:03.383 に答える
0

assert引数が true であることを確認する実行時チェックです。この場合、ファイルは無効です。

于 2011-10-05T20:21:15.487 に答える
0

だから私はついにそれを手に入れました。「fraction.data」ファイルをメイン プロジェクト ディレクトリに移動するだけです。以前は、ディレクトリ内のソース フォルダーにありました。

于 2011-10-05T21:43:53.993 に答える