referenzparameterübergabe, c++

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von hosh, 07.05.2006.

  1. hosh

    hosh Thread Starter MacUser Mitglied

    Beiträge:
    425
    Zustimmungen:
    5
    Registriert seit:
    08.07.2003
    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::out);
    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
     
  2. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    Registriert seit:
    02.09.2004
    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.
     
  3. hosh

    hosh Thread Starter MacUser Mitglied

    Beiträge:
    425
    Zustimmungen:
    5
    Registriert seit:
    08.07.2003
    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! ;)
     
  4. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    Registriert seit:
    02.09.2004
    ...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...
     
Die Seite wird geladen...

Diese Seite empfehlen