Ich habe einen Code in C++ geschrieben, der aus einer Textdatei liest oder eine neue mit erstellt mit ifstream
/ofstream
. Ich wollte eine Überprüfung mit .is_open
Elementfunktion von fstream
hinzufügen, um zu sehen, ob die Dateien erfolgreich geöffnet wurden. Es funktioniert korrekt innerhalb der Hauptschleife. Dann habe ich versucht, zu diesem Zweck eine Funktion außerhalb der Schleife zu erstellen, und nennt es innerhalb main
, und ich habe folgende Fehlermeldung:C++ kann ifstream/ofstream.is_open() innerhalb einer Funktion nicht überprüfen
std::ios_base::ios_base(const std::ios_base&)
is private.
Ist es möglich, die Kontrolle außerhalb der Hauptschleife zu machen? Wie? Was mache ich falsch?
Ich würde mich freuen, wenn Sie helfen können. Sie können den folgenden Code finden.
P.S. Ich bin ein Neuling in C++, also überlisten Sie bitte nicht unprofessionelle Programmieransätze, wenn Sie welche sehen. Obwohl irgendwelche Verbesserungsvorschläge mehr als willkommen sind.
#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;
}
Der Fehler tritt unabhängig davon auf, ob Sie den Aufruf 'is_open' haben oder nicht. Ein Teil davon, [mcve] zu machen, stellt deine Annahmen in Frage. – chris
Sie übergeben 'toget' und' togive' nach Wert an die Funktion 'check_opened'. Und es sieht so aus, als ob es nicht erlaubt ist, 'ifstream's' oder' ofstream' zu kopieren. Versuchen Sie, sie als Referenzen oder Zeiger zu übergeben. – gurka
@gurka, Vielen Dank, ich habe es als Referenz verwendet und es hat funktioniert. – UserRR