【问题标题】:I can't open variable file name我无法打开变量文件名
【发布时间】:2010-11-06 20:42:17
【问题描述】:

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;
}

【问题讨论】:

  • 请编辑您的问题以包含一个完整的、最小的、可编译的代码 sn-p 来演示问题。
  • 告诉我们你遇到了什么错误或者它是如何“不让你打开文件”的。
  • @calccrypto:这是不可编译的;请包含一个main 函数来演示您如何使用它。
  • 主线没什么好说的。我只是输入了一个名为 fname 的字符串,它是由用户输入的。
  • 好吧,我会推荐 VS Express 作为免费选项。真的不能推荐其他任何东西。

标签: c++ file file-io


【解决方案1】:

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

file.open( file_name.c_str() );

在 C++11 中,这不再是必需的。添加了采用std::string 的签名。

【讨论】:

    【解决方案2】:

    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())
    

    【讨论】:

      【解决方案3】:

      我认为亚历山大是对的。 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 中添加的,但我没有'没有那个副手的参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 2018-05-30
        相关资源
        最近更新 更多