C++ 无法检查函数内部的 ifstream/ofstream.is_open()

标签 c++ scope fstream ifstream ofstream

我用 C++ 编写了一段代码,该代码从文本文件中读取或使用 ifstream/ofstream 创建新文件。我想用 fstream.is_open 成员函数添加一个检查,以查看文件是否已成功打开。它在主循环内正常工作。然后我尝试为此目的在循环外创建一个函数,并在 main 中调用它,但出现以下错误:

std::ios_base::ios_base(const std::ios_base&) is private.

是否可以在主循环之外进行检查?如何?我究竟做错了什么?

如果您能提供帮助,我将不胜感激。您可以在下面找到代码。

附言我是 C++ 的新手,所以如果您看到任何不专业的编程方法,请不要过分批评。尽管我们非常欢迎任何改进建议。

#include <iostream>
#include <fstream>
using namespace std;

void check_opened(ifstream toget, ofstream togive){
    if(toget.is_open()){
        cout<<"able to open file(toread.txt)"<<endl;
    }
    else {
        cout<<"failure"<<endl;
    }
    if(togive.is_open()){
        cout<<"able to create/open a file(newone.txt)"<<endl;
    }
    else {
        cout<<"failure"<<endl;
    }
}
int main () {
    ifstream toget;
    ofstream togive;
    toget.open("toread.txt");
    togive.open("newone.txt");
    check_opened(toget,togive);
    toget.close();
    togive.close();
  return 0;
}

最佳答案

check_opened 函数不引用流,它引用流的拷贝。因此,当您调用 check_opened 时,您的主函数会隐式调用 ifstreamofstream 的复制构造函数,它们是私有(private)的,这会导致错误。将 check_opened 的签名更改为 void check_opened(ifstream&, ofstream&) 将解决您的问题。

关于C++ 无法检查函数内部的 ifstream/ofstream.is_open(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298712/

相关文章:

c++ - boost multi_index_container 更改键 -> 容器状态不正确

c - 为什么要用大括号将 C 代码块括起来?

c++ - std::ofstream::open 会把整个文件读入内存吗?

c++ - 尝试使用 ostream 保存文件内容时出错

c++ - 嵌套的 try-catch block ?

c++ - 当代码中不存在代码行时,如何解决 Visual Studio 2010 C++ 中的错误 C2719

php - 在 foreach 循环中声明的 PHP 变量是否在每次迭代时被销毁并重新创建?

php - 将静态变量设置为 null 后检查其是否为 Null

c++ - 如何检查从键盘输入的特定整数值是否存在于 C++ 文件的一行或多行中

c++ - 如何删除堆中未存储到变量指针的对象?