2012-10-12 24 views
0

我不明白髮生了什麼。我有這樣的代碼:類內的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」 的方法是行不通的。我做錯了什麼?

+6

說一些「不工作」是無益的。你期望會發生什麼?究竟發生了什麼? –

+0

你沒有把相同的代碼放在cass裏面: -/ –

+0

我預料如果文件不存在,對象將不會被創建。但是對象被創建。 –

回答

1

它確實有效。你在期待什麼?您從構造函數返回,所以構造函數將退出,將創建對象(使用無效成員)並繼續執行。

可以,而是拋出一個異常信號無效目標:

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

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

如果OP在istream之後對類進行建模,那麼添加is_open()成員可能更合適? –

+0

我明白了。有用!非常感謝你。 :) –