我试图解析一个文件。但是,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.
我知道该文件是打开的,因为在我的解析cpp文件中,我将dfa_file.fail()更改为!dfa_file.is_open()并且它已停止向我提供该错误。我做错了什么?
编辑:我能够通过将文件的完整路径放在变量filename中来解决问题。就像在我的main.cpp文件中一样
std::string filename = "/Users/myname/Documents/DFA/no000.dfa";
答案 0 :(得分:4)
在构造函数中初始化stop_program
。