C++ ifstream文件已打开但失败

问题描述:

即时尝试解析文件。但是,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

在构造函数中初始化stop_program

+0

对不起!我已经初始化了,但我只是忘记写在这里。现在应该是好的。 – astrocat1997