Über uns
Know-how
FAQ
Projektverlauf
Technikbereich
Ip-Vergabe
Organisation / Termine
Community
Forum
Karte
Gästebuch
Partner
Sonstiges
Downloads
Gallery
Spenden-Topf
Forum Startseite Wiki Karte Forum
WLanhsh & WLanwse Foren-Übersicht WLanhsh & WLanwse
Forum des WLan Hohenschönhausen und des WLan Weißensee
wlanhsh.freifunk.net
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

c++, referenzparameterübergabe? problem

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    WLanhsh & WLanwse Foren-Übersicht -> Offtopic
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hosh



Anmeldedatum: 18.01.2006
Beiträge: 83
Wohnort: wse herbert-baum-str

BeitragVerfasst am: 07.05.2006, 19:14    Titel: c++, referenzparameterübergabe? problem Antworten mit Zitat

hi!

ich komm gerade bei einem problem nicht weiter, vllt kann mir jemand helfen.

per new habe ich mir ein dynamisches feld erzeugt

struct buchID {
int fzNR;
};

...
buchID* buchung = new buchID[groesse];
...

nun möchte ich diese array an eine funktion übergeben.

aus verschiedenen quellen, hab ich verschiedene varianten aber keine funzt so richtig

daten_auslesen(buchID& buchung, groesse); funtionsaufruf

int daten_auslesen(buchID& buchung1,int groesse1) funktionsheader

mal als beispiel

war das verständlich?

kann mir jemand weiterhelfen?

gruß hosh
_________________
hosh @ 104.0.200.1 :: jabber
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gockelhahn



Anmeldedatum: 07.12.2005
Beiträge: 184
Wohnort: Berliner Allee / Smetanastraße (104.13.13.13)

BeitragVerfasst am: 07.05.2006, 19:44    Titel: Antworten mit Zitat

Zitat:
daten_auslesen(buchID& buchung, groesse); funtionsaufruf

beim funktionsaufruf hat das "&" nix zu suchen:

Code:
daten_auslesen(buchung, groesse); // funtionsaufruf

...
Zitat:
struct buchID {
int fzNR;
};

buchID* buchung = new buchID[groesse];


wenn du nur diesen einen wert in die struktur packen willst, brauchst du sie nicht und es reicht auch ein array of int:

Code:
int* buchung = new int[groesse];

_________________
jabber: gockelhahn @ dernico.no-ip.org
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hosh



Anmeldedatum: 18.01.2006
Beiträge: 83
Wohnort: wse herbert-baum-str

BeitragVerfasst am: 07.05.2006, 20:20    Titel: Antworten mit Zitat

es kommen natürlich noch mehr werte in die struktur, es ist erstmal nur ein funktionstest.


ok ha das nochmal angepasst

aber es kommt noch folgende fehlermldung

main.cpp:107: error: invalid cast from type 'buchID' to type 'char*'

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;
}

so sieht es immo aus!

danke schonmal
_________________
hosh @ 104.0.200.1 :: jabber
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gockelhahn



Anmeldedatum: 07.12.2005
Beiträge: 184
Wohnort: Berliner Allee / Smetanastraße (104.13.13.13)

BeitragVerfasst am: 07.05.2006, 21:03    Titel: Antworten mit Zitat

sorry aber mit dem lesen/schreiben von dateien hatte ich noch nicht wirklich was zu tun ...

Zitat:
ostream& write ( const char* str , streamsize n );


darunter verstehe ich:
du musst dein "int fzNR" zuerst in einen string umwandeln und dann einen pointer auf den ersten char des strings übergeben und als zweiten parameter die länge des strings
_________________
jabber: gockelhahn @ dernico.no-ip.org
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Leon Sczepansky
Gast





BeitragVerfasst am: 08.05.2006, 08:14    Titel: Antworten mit Zitat

schau doch mal in die msdn oder in ein Forum (c-plusplus.de).

ach ja, zur umwandlung eignet sich doch wsprintf(), oder?
Nach oben
janch



Anmeldedatum: 07.04.2006
Beiträge: 9

BeitragVerfasst am: 08.05.2006, 12:59    Titel: Antworten mit Zitat

Du castest in Zeile 107 eine Referenz auf einen Struct in einen Zeiger auf ein Feld von Zeichen. Das mag der Compiler net...

Folgende Möglichkeiten:

Code:

 dat_aus.write((char *) & buchung1, sizeof(struct buchID)*groesse1);
(kann man in CODE-Block nicht fett ausgeben???)

Damit übergibst Du einen Zeiger auf das Element, das kann dann in einen Zeiger auf char umgewandelt werden.

Oder die saubere Ansi-C++ - Lösung:

Code:

 dat_aus.write(reinterpret_cast <char *> (&buchung1), sizeof(struct buchID)*groesse1);



Aufpassen musst Du noch, welchen Wert Du in Deine Funktion kippst...

Code:
daten_auslesen(buchung, groesse); // funtionsaufruf


schüttet einen Zeiger in die Funktion, die eine Referenz auf eine Struktur erwartet. Sollte der Compiler das wirklich akzeptieren, wird Dich spätestens Dein Programm zur Laufzeit mit einer Zugriffsverletzung überraschen.

Code:
daten_auslesen(buchung[n], groesse); // funtionsaufruf
, wobei n das n-te Element ist, oder für's erste sollte auch reichen:

Code:
daten_auslesen(*buchung, groesse); // funtionsaufruf


Und um Dich ganz zu verwirren:

Du kannst auch ne Referenz auf nen Zeiger verwenden:

Code:
daten_auslesen(buchID * & buchung, groesse); // Deklaration


, aber das bringt Dich hier nicht wirklich weiter.

Gruß

Der janch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Leon Sczepansky
Gast





BeitragVerfasst am: 08.05.2006, 17:22    Titel: Antworten mit Zitat

Zitat:
Du castest in Zeile 107 eine Referenz auf einen Struct in einen Zeiger auf ein Feld von Zeichen. Das mag der Compiler net...


Pfui... ich finde "Feld" hört sich soooo blöd an!

Wo wir hier schon mal bei C++ sind... was habtn ihr so drauf?
Ich habe vor nem halben Jahr mal mit WinAPI angefangen, bin dann aber an diesen ganzen Handel-,Zeiger-,Klassenwirrwarr gescheitert. MFC find ich da schon ansprechender, wenn es auch nen bisschen oberflächig ist, weil man da ja nur auf ne Lirary zugreift.
Nach oben
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    WLanhsh & WLanwse Foren-Übersicht -> Offtopic Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de