我无法打开变量文件名

时间:2010-11-06 20:42:18

标签: c++ file file-io

为什么Dev C++不允许我file.open(file_name_variable)?我不明白为什么它不会让我打开任何东西,只有像file.open("abc.txt")这样的硬编码名称如何解决这个问题?不要使用Dev C ++?

这基本上就是我所拥有的:

int open_file(string file_name){
    ifstream file;
    file.open(file_name);
    if (!file.is_open()){
        return 0;       
    }
    return 1;
}

3 个答案:

答案 0 :(得分:6)

你需要传递一个c字符串。使用:

file.open( file_name.c_str() );

在C ++ 11中,不再需要这样做了。添加了std::string的签名。

答案 1 :(得分:1)

fstream::open需要const char *作为第一个参数。

void open ( const char * filename,
        ios_base::openmode mode = ios_base::in | ios_base::out );

它不需要std::string(顺便说一句,这是一种耻辱) 您需要将std::string转换为const char *

file.open(file_name.c_str())

答案 2 :(得分:0)

亚历山大是对的,我想。 open的签名是:

void open(const char * filename,ios_base :: openmode mode);

您尝试将std :: string作为const char *传递,但是std :: string没有运算符const char *(出于安全原因)。相反,您必须使用c_str()方法。问题不在于对const char *的隐式转换应该是可用的,但是basic_ifstream应该有一个接受字符串的开放重载 - 据我所知,这是在C ++ 0x中添加的,但我不知道

。没有参考。