0

何が起こっているのかわかりません。私はそのようなコードを持っています:

#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」が機能しないようです。私は何を間違っていますか?

4

1 に答える 1

1

それは機能します。何を期待していますか?コンストラクターから戻っているため、コンストラクターが終了し、オブジェクトが (無効なメンバーで) 作成され、実行が続行されます。

代わりに、例外をスローして、無効なオブジェクトを知らせることができます。

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

    if(!infile.is_open()) 
        throw std::exception("file not found");
}
于 2012-10-12T11:32:30.613 に答える