|
|
|
WLanhsh & WLanwse Forum des WLan Hohenschönhausen und des WLan Weißensee wlanhsh.freifunk.net
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hosh
Anmeldedatum: 18.01.2006 Beiträge: 83 Wohnort: wse herbert-baum-str
|
Verfasst am: 07.05.2006, 19:14 Titel: c++, referenzparameterübergabe? problem |
|
|
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 |
|
|
gockelhahn
Anmeldedatum: 07.12.2005 Beiträge: 184 Wohnort: Berliner Allee / Smetanastraße (104.13.13.13)
|
Verfasst am: 07.05.2006, 19:44 Titel: |
|
|
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 |
|
|
hosh
Anmeldedatum: 18.01.2006 Beiträge: 83 Wohnort: wse herbert-baum-str
|
Verfasst am: 07.05.2006, 20:20 Titel: |
|
|
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 |
|
|
gockelhahn
Anmeldedatum: 07.12.2005 Beiträge: 184 Wohnort: Berliner Allee / Smetanastraße (104.13.13.13)
|
Verfasst am: 07.05.2006, 21:03 Titel: |
|
|
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 |
|
|
Leon Sczepansky Gast
|
Verfasst am: 08.05.2006, 08:14 Titel: |
|
|
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
|
Verfasst am: 08.05.2006, 12:59 Titel: |
|
|
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 |
|
|
Leon Sczepansky Gast
|
Verfasst am: 08.05.2006, 17:22 Titel: |
|
|
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 |
|
|
|
|
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
|
| |