繁体   English   中英

类中的ifstream

[英]Ifstream inside a class

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

#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”不起作用。 我做错了什么?

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

您可以改为引发异常来通知无效对象:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM