2016-02-23 108 views
2

即時嘗試解析文件。但是,ifstream對象仍然失敗。在我的解析頭文件中,我有這樣的:C++ ifstream文件已打開但失敗

class ParseDFA { 
public: 
    bool stop_program = false; 
    std::ifstream dfa_file; 
    ParseDFA(std::string parse_filename); 
}; 
在我的分析CPP文件

我有這樣的:

ParseDFA::ParseDFA(std::string parse_filename) { 
    dfa_file.open(parse_filename, std::ifstream::in); 

    if (dfa_file.fail()) { 
    stop_program = true; 
    } 
} 

,並在我的main.cpp文件,我有這樣的:

std::string filename = "no000.dfa"; 
ParseDFA *dfa_file = new ParseDFA(filename); 
if (dfa_file->stop_program) { 
    std::cout << "Error opening file." << std::endl; 
    return 0; 
} 

我的輸出:

Error opening file. 

我知道文件i因爲在我的解析cpp文件中,我將dfa_file.fail()更改爲!dfa_file.is_open(),並且它停止向我提供該錯誤。所以我做錯了什麼?

編輯:我可以通過將文件的完整路徑放在變量文件名中來解決這個問題。所以就像在我的main.cpp文件中我有

std::string filename = "/Users/myname/Documents/DFA/no000.dfa"; 
+0

stop_program未定義。 –

+0

@ n.m。它實際上被定義爲我忘了在這裏寫下來。抱歉! – astrocat1997

+0

@ astrocat1997:你可以擴展你的例子,以便它可以用來可靠*重現*你觀察到的行爲,'fail()'和'! IS_OPEN()'? – DevSolar

回答

4

在構造函數中初始化stop_program

+0

對不起!我已經初始化了,但我只是忘記寫在這裏。現在應該是好的。 – astrocat1997