一个类里面的ifstream

时间:2012-10-12 11:30:19

标签: c++ ifstream

我不明白发生了什么。我有这样的代码:

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    ifstream infile;
    infile.open("test.txt");
    if(!infile) return 1;
    infile.close();

    return 0;
}

它运作正常。名为“text.txt”的文件不存在。应用程序返回1.但是当我在类中放入相同的代码时,它会起作用。这是宣言:

#pragma once

#include <iostream>
#include <fstream>

using namespace std;

class Record
{
public:
    Record(char *filename);
public:
    ~Record(void);

private:
    ifstream infile;
}

构造函数:

Record::Record(char *filename)
{
    infile.open(filename);

    if(!infile.is_open()) return;
}

似乎方法“is_open”不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:1)

确实有效。你有什么期待?您将从构造函数返回,因此构造函数将退出,将创建对象(使用无效成员)并继续执行。

相反,您可以抛出异常来发出无效对象的信号:

Record::Record(char *filename)
{
    infile.open(filename);

    if(!infile.is_open()) 
        throw std::exception("file not found");
}