【问题标题】:Assertion `in' failed - c++断言'in'失败 - C++
【发布时间】:2011-10-06 05:43:53
【问题描述】:

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

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

【问题讨论】:

  • 文件fraction.data是否与程序在同一目录下?
  • @KerrekSB 不会 fraction.data 实际上需要存在于工作目录中(显然也可能是程序目录)?
  • 错误信息可能是因为assert函数没有公共符号。
  • assert(x) 基本上说“如果x 为假则崩溃”并且仅适用于调试版本。基本上这意味着流由于某种原因无法加载您的文件。
  • @KerrekSB:是的,fraction.data 在同一个目录中

标签: c++ assertion


【解决方案1】:

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

assert(in)

失败,因为(输入文件)中的计算结果为假。您的代码无法打开名为“fraction.data”的文件。如果 in 是一个有效的输入文件流,assert(in) 就会通过,然后你就可以继续你的业务了。

简答 -> “找不到文件”或“无法在此处创建文件”。

【讨论】:

  • 任何想法都找不到“fraction.data”文件?它与客户端程序在同一个导向器中。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 2016-02-19
      • 2014-12-15
      相关资源
      最近更新 更多