以下是分数类的客户端程序的一部分。我写了这个类,现在用给定的客户端程序测试它。当我尝试运行它时,我收到此错误:
断言
'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;
答案 0 :(得分:2)
如果表达式的计算结果为false,则assert()将失败。
assert(in)
失败,因为in(输入文件)的计算结果为false。您的代码无法打开名为“fraction.data”的文件。如果in是有效的输入文件流,则assert(in)将通过,并且您将继续关注您的业务。
简短回答 - &gt; “找不到文件”或“无法在此处创建文件”。
答案 1 :(得分:0)
assert
是运行时检查,用于验证其参数是否为true。在这种情况下,您的文件无效。
答案 2 :(得分:0)
所以我终于明白了。我只需要将“fraction.data”文件移动到主项目目录。以前,我把它放在目录中的源文件夹中。