断言'in'失败 - c ++

时间:2011-10-05 20:16:55

标签: c++ assertion

以下是分数类的客户端程序的一部分。我写了这个类,现在用给定的客户端程序测试它。当我尝试运行它时,我收到此错误:

  

断言'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;

3 个答案:

答案 0 :(得分:2)

如果表达式的计算结果为false,则assert()将失败。

assert(in)

失败,因为in(输入文件)的计算结果为false。您的代码无法打开名为“fraction.data”的文件。如果in是有效的输入文件流,则assert(in)将通过,并且您将继续关注您的业务。

简短回答 - &gt; “找不到文件”或“无法在此处创建文件”。

答案 1 :(得分:0)

assert是运行时检查,用于验证其参数是否为true。在这种情况下,您的文件无效。

答案 2 :(得分:0)

所以我终于明白了。我只需要将“fraction.data”文件移动到主项目目录。以前,我把它放在目录中的源文件夹中。