' ofstream的'和' fstream'阅读文件

时间:2015-04-15 05:37:55

标签: c++ xcode function io

fstream& fileReading(const string& signalFile, const string& backgroundFile){
    ofstream fileName;
    fileName.open(signalFile, ios::in | ios::binary);

 //does more stuff here

    return fileName;
}

我收到以下错误消息:

非常量左值引用类型' fstream'不能绑定到不相关类型的值' ofstream'。

我不确定这意味着什么或为什么我收到它。

我觉得它与fstream和ofstream的声明有关。

当我将返回类型更改为ofstream时,我收到一条消息,指出: 引用与本地变量' fileName'相关联的堆栈内存。返回。

我想帮助理解所有这些意味着什么以及如何重构函数/方法来返回我将创建和写入的文件。

非常感谢任何帮助。初学者在c ++中必须动态学习语言。

2 个答案:

答案 0 :(得分:2)

这里有两个问题:

  • 您正在尝试返回对本地对象的引用;对象在作用域的末尾被销毁,然后你会返回对它的引用;这是无效的。考虑返回一个实例,而不是引用。

  • 您正在尝试返回与函数应返回的对象不同的对象。考虑更改函数以返回ofstream实例,然后确保通过移动返回它:

    std::ofstream fileReading(const string& signalFile,
                               const string& backgroundFile)
    {
        return std::ofstream{ signalFile, ios::in|ios::binary };
    }
    

答案 1 :(得分:0)

您必须返回文件处理程序(& fileName)的地址而不是fileName,因此您的代码必须是:

fstream& fileReading(const string& signalFile, const string& backgroundFile){
    ofstream fileName;
    fileName.open(signalFile, ios::in | ios::binary); 
    return fileName;
}

你必须按照以下方式调用此功能:

fstream* fileHandlerPointer = fileReading("sample.txt" , "sample2.tct");