首页 > 解决方案 > 为什么我不能从函数返回的流的引用中读取?

问题描述

我想从我的函数返回的流中获取数据,但是当我尝试时它会引发异常。这是我的简短代码:

#include <iostream>
#include <fstream>  
using namespace std;
ifstream& detect() {
    ifstream stream;
    stream.open("in.txt");
    return stream;
}
int main() {
    int s;
    ifstream& fin = detect();
    fin >> s; //exception thrown: Access violation reading
    cout << s;
}

我怎么解决这个问题?是因为“fin”的引用类型引起的吗?

标签: c++referenceifstream

解决方案


streamin detect()function 是一个局部变量,在函数调用后将被释放。您不能传递stream. 而是将代码更改为:

ifstream detect() {
    ifstream stream;
    stream.open("in.txt");
    return stream;
}

推荐阅读