C++ 无法在函数内部检查 ifstream/ofstream.is_open()
C++ unable check ifstream/ofstream.is_open() inside a function
我用 C++ 编写了一段代码,它从文本文件中读取数据或使用 ifstream
/ofstream
创建新的文件。我想用 .is_open
的 fstream
成员函数添加一个检查,以查看文件是否已成功打开。它在主循环内正常工作。然后我尝试为此目的在循环外创建一个函数,并在 main
内调用它,但出现以下错误:
std::ios_base::ios_base(const std::ios_base&)
is private.
是否可以在主循环之外进行检查?如何?我究竟做错了什么?
如果您能提供帮助,我将不胜感激。您可以在下面找到代码。
P.S。我是 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 时,您的主函数会隐式调用 ifstream
和 ofstream
的复制构造函数,它们是私有的,这会导致错误。将 check_opened 的签名更改为 void check_opened(ifstream&, ofstream&)
将解决您的问题。
我用 C++ 编写了一段代码,它从文本文件中读取数据或使用 ifstream
/ofstream
创建新的文件。我想用 .is_open
的 fstream
成员函数添加一个检查,以查看文件是否已成功打开。它在主循环内正常工作。然后我尝试为此目的在循环外创建一个函数,并在 main
内调用它,但出现以下错误:
std::ios_base::ios_base(const std::ios_base&)
is private.
是否可以在主循环之外进行检查?如何?我究竟做错了什么?
如果您能提供帮助,我将不胜感激。您可以在下面找到代码。
P.S。我是 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 时,您的主函数会隐式调用 ifstream
和 ofstream
的复制构造函数,它们是私有的,这会导致错误。将 check_opened 的签名更改为 void check_opened(ifstream&, ofstream&)
将解决您的问题。