ios_base private

DeChecka

Erfahrenes Mitglied
Hi!
Ich habe mit Dev-C++ mehrere Header erstellt: Datei1.h, Datei2.h und Datei3.h
Dazu habe ich natürlich entsprechend Datei1.cpp, Datei2.cpp und Datei3.cpp

Klar ist dann auch, dass ich, wenn ich Funktionen aus den erstellten Headern benutzen will, diese mit "DateiX.h" einbinden muss in die main.cpp.
Wenn ich jetzt allerdings eine Funktion aus Datei3.h in Datei2.cpp nutzen will, geht das so nicht... Es kommt die Fehlermeldung: In copy constructor `std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)':

738 C:\Programme\Dev-Cpp\include\c++\3.4.2\bits\ios_base.h `std::ios_base::ios_base(const std::ios_base&)' is private

Ich weiß nicht, ob das jetzt an was anderem liegt... Aber ich vermute mal, dass es daran liegt, dass ich 'ne Header in nen Source-Code für eine andere Header einbinden will.

Wenn die Fehlermeldung erscheint, geht auch immer gleich noch in Dev-C++ die Klassendekaration für ios_base auf...

Könnt ihr weiterhelfen?

MfG
DeChecka
 
Also deine Vermutung ist falsch. Ich vermute mal, du benutzt irgendeinen Stream, wie z.B. std::cin oder Ähnliches und versuchst dann soetwas:
Code:
std::istream mystr;
mystr = std::cin;

Das geht aber nicht, da der copy-Konstruktor der Klasse ios_base, der bei der Zuweisung eine Kopie der Instanz dieser Klasse anlegen würde, als "private" deklariert ist um genau das zu verhindern. (was dir der GCC ja auch schon gesacht hatte.)

Ich weiß ja nicht was du verhast, aber evtl. mußt du auf einen Pointer zurückgreifen:
Code:
std::istream *pmystr;
pmystr = &std::cin;
(*pmystr) << "xxx";

Für eine genauere Erklärung müßteste aber einfach mal etwas Code zeigen.
 
Mhhh, stimmt... ich weiß jetzt, an was es ungefähr gelegen haben könnte...

Ich habe nämlich eine Funktion, die als Parameter "std::ifstream" erwartet...
Sie soll einfach testen, ob ein Objekt, dass zum Lesen geöffnet wird, auch geöffnet werden konnte...

Das sieht quasi so aus dann:
Code:
bool Oeffnen(ifstream dateiname)
{
 if(!dateiname)
 {
  cout << "Fehler beim Lesen!" << endl;
  cout << "Programm muss beendet werden!" << endl;
  cout << "Bitte druecken Sie eine beliebige Taste!" << endl;
  getch();
  return false;
 }
 return true;
}

Geht das dann irgendwie anders?

MfG
DeChecka
 
moin


Das Problem hat deepthroat ja schon beschrieben, hier die Umsetzung zu deinem Programm:
Code:
#include <fstream>
#include <iostream>

using namespace std;

bool Oeffnen(ifstream *dateiname)
{
	if(!dateiname)
	{
		cout << "Fehler beim Lesen!" << endl;
		cout << "Programm muss beendet werden!" << endl;
		cout << "Bitte druecken Sie eine beliebige Taste!" << endl;
		
		return false;
	}
	return true;
}

int main()
{
	ifstream datei("test2.txt");

	bool x = Oeffnen(&datei);	

	return 0;
}


mfg
umbrasaxum
 
Zurück