referenzparameterübergabe, c++

hosh

Aktives Mitglied
Thread Starter
Dabei seit
08.07.2003
Beiträge
426
Reaktionspunkte
5
hallo,

ich erzeuge mir mit

buchID* buchung = new buchID[groesse];

ein array, und dieses möchte ich gern an eine funktion übergeben, die die werte des arrays in eine datei schreibt

hier der programmteil, der funktion:

ofstream dat_aus;
dat_aus.open("buchungen.dat", ios_base::eek:ut);
if (!dat_aus)
{
cerr<<"datei konnte nicht geöffnet werden!\n";
return 1;
}

dat_aus.write((char *)buchung, sizeof(struct buchID)*groesse);
dat_aus.close();


ich habe jetzt verschiedene sachen probiert, aber ich bekomm immer wieder fehlermeldungen ...

hat jemand ne idee?

dank und gruß hosh
 
hosh schrieb:
ich habe jetzt verschiedene sachen probiert, aber ich bekomm immer wieder fehlermeldungen ...
Poste mal die Fehlermeldungen (und am besten ein lauffähiges Codestück).

p.s.: Wegen der unterschiedlichen Anordnung der Bytes im Speicher kann es grundsätzlich zu Problemen kommen, wenn man den Inhalt des RAMs "einfach so" in eine Datei schreibt und das wechselweise mit PowerPC- und intel-Prozessoren verarbeitet.
 
Code:
struct buchID	{
				int fzNR;
				};
int daten_auslesen(buchID *buchung, int groesse1);

int main()
{
	cout<<"eingabe: ";
	int groesse=0;
	int i=0;
	cin>>groesse;
	buchID* buchung = new buchID[groesse];
	for(i=0; i<=groesse; i=i+1)
	{
		cout<<"Flugzeugnummer: ";
		cin>>buchung[i].fzNR;
	}
	cout<<"\n"<<&buchung;
	for(i=0; i<=groesse; i=i+1)
	{
		cout<<"\nFlugzeugnummer: "<<buchung[i].fzNR;
	}
	daten_auslesen(buchung, groesse);
	delete[] buchung;
	return 0;
}



int daten_auslesen(buchID& buchung1, int groesse1)
{
	ofstream dat_aus;
	dat_aus.open("buchungen.dat", ios_base::out);
	if (!dat_aus)
	{
		cerr<<"datei konnte nicht geöffnet werden!\n";
		return 1;
	}
	
	dat_aus.write((char *)buchung1, sizeof(struct buchID)*groesse1);
// main.cpp:107: error: invalid cast from type 'buchID' to type 'char*'
     dat_aus.close();
	return 0;
}

hallo: ich weiß zwar nicht, ob es damit jetzt noch zusammenhängt, aber ich hab jetzt nur noch diesen fehler. wenn ich die ausgelagerte funktion im hauptprogramm betreibe, dann gibt es dort an dieser stelle kein problem.?.

achso, die structur ist nur so klein, weil ich etwas teste will! ;)
 
hosh schrieb:
Code:
struct buchID	{
				int fzNR;
				};
int daten_auslesen(buchID *buchung, int groesse1);

int main()
{
	cout<<"eingabe: ";
	int groesse=0;
	int i=0;
	cin>>groesse;
	buchID* buchung = new buchID[groesse];
	for(i=0; i<=groesse; i=i+1)
	{
		cout<<"Flugzeugnummer: ";
		cin>>buchung[i].fzNR;
	}
	cout<<"\n"<<&buchung;
	for(i=0; i<=groesse; i=i+1)
	{
		cout<<"\nFlugzeugnummer: "<<buchung[i].fzNR;
	}
	daten_auslesen(buchung, groesse);
	delete[] buchung;
	return 0;
}



int daten_auslesen(buchID& buchung1, int groesse1)
{
	ofstream dat_aus;
	dat_aus.open("buchungen.dat", ios_base::out);
	if (!dat_aus)
	{
		cerr<<"datei konnte nicht geöffnet werden!\n";
		return 1;
	}
	
	dat_aus.write((char *)buchung1, sizeof(struct buchID)*groesse1);
// main.cpp:107: error: invalid cast from type 'buchID' to type 'char*'
     dat_aus.close();
	return 0;
}

hallo: ich weiß zwar nicht, ob es damit jetzt noch zusammenhängt, aber ich hab jetzt nur noch diesen fehler. wenn ich die ausgelagerte funktion im hauptprogramm betreibe, dann gibt es dort an dieser stelle kein problem.?.

achso, die structur ist nur so klein, weil ich etwas teste will! ;)

...also der augenscheinliche Fehler ist, dass man einfach keine (Referenzen auf eine) Struktur in einen Pointer casten darf. Du könntest (char*) (&buchung1) schreiben, solltest aber den Prototyp in
Code:
int daten_auslesen(buchID* buchung1, int groesse1)
ändern. Ich glaube ehrlich, dass Dich diese Software sehr unglücklich machen wird. :-/

Kann es sein, dass es sehr viele kleine Objekte vom Typ "buchID" geben wird die geschrieben, gelesen, gelöscht und gesucht werden? Das ist eher ein Fall für eine SQL-Datenbank...
 
Zurück
Oben Unten