Es geht um diese Problematik.
Ich hab hier mal ein Snippet zusammengeschustert, was ich so ähnlich in einem größeren Projekt verwende.
[src=cpp]
#include <fstream>
class Delfunc {
public:
Delfunc(std::ifstream &is);
private:
std::ifstream is_;
};
Delfunc:elfunc(std::ifstream &is) {
is_ = is;
}
int main() {
return 0;
}[/src]
Beim Compilieren krieg ich dann folgenden Fehler
Die Erklärung:
Bei ifstream wurde der Copy Constructor gelöscht, damit man durch falsche Übergabe nicht auf leere Objekte versucht zuzugreifen (so oder irgendwie). Aus dem Grund soll / kann man solche Objekte nur als Referenzen übergeben. Mit dem übergebenen Wert is im Konstruktor kann ich auch noch prima arbeiten. Nur krieg ich die Referenz nicht in die Membervariable is_ rein, um den ifstream noch in weiteren Funktionen nutzen zu können.
Wie mach ich das?
Ich hab hier mal ein Snippet zusammengeschustert, was ich so ähnlich in einem größeren Projekt verwende.
[src=cpp]
#include <fstream>
class Delfunc {
public:
Delfunc(std::ifstream &is);
private:
std::ifstream is_;
};
Delfunc:elfunc(std::ifstream &is) {
is_ = is;
}
int main() {
return 0;
}[/src]
Beim Compilieren krieg ich dann folgenden Fehler
Code:
g++ -std=c++11 -o delfunc main.cpp
main.cpp: In Konstruktor »Delfunc::Delfunc(std::ifstream&)«:
main.cpp:11:9: Fehler: gelöschte Funktion »std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&)« wird verwendet
is_ = is;
Die Erklärung:
Bei ifstream wurde der Copy Constructor gelöscht, damit man durch falsche Übergabe nicht auf leere Objekte versucht zuzugreifen (so oder irgendwie). Aus dem Grund soll / kann man solche Objekte nur als Referenzen übergeben. Mit dem übergebenen Wert is im Konstruktor kann ich auch noch prima arbeiten. Nur krieg ich die Referenz nicht in die Membervariable is_ rein, um den ifstream noch in weiteren Funktionen nutzen zu können.
Wie mach ich das?