Frage zu Parameterübergabe per Referenz
-
Hallo zusammen,
ich habe folgendes gecodet und es hat nicht funktioniert (test soll DIREKT die Werte im Array ändern):
void test(int& x){...} //main: int array[10]; for(...) test(array[i]);
Funktioniert nicht!!! Im array stehen danach nur die alten Werte!
void test(int* x){...} //main: for(...) test(&array[i]);
Funktioniert, allerdings muss ich jedes mal, bevor ich etwas mit x mache, dereferenzieren
Meine Frage ist nun, warum geht das nicht? Müsste doch äquivalent sein?
-
Hmm, ich kann hier keinen Fehler erkennen. Zeig doch mal den ganzen Code, der nicht funktioniert. Ich habe kurz etwas vergleichbares programmiert und das funktioniert einwandfrei.
-
das muss gehen - da lag dein fehler wo anders...
btw:
&array[x]
==array+x
bb
-
Danke für die schnellen Antworten!!
#include <boost/bind.hpp> #include <boost/thread.hpp> //bla bla void rle(..., pair<int, char>*& ret, unsigned int& size){...} //main: //... pair<int, char>* ret[nr_threads]; unsigned int size[nr_threads]; //start threads for(unsigned int i = 0; i < nr_threads; ++i){ //create thread with own memory! ret[i] = NULL; size[i] = 0; thread* t = new thread(bind(rle, ... , ret[i], size[i])); }
Ich hoffe mal da sind nicht noch andere Fehler drin, ich hab schon ein bisschen dran rumgebastelt
-
lern mal richtig die grundlagen vor du mit threads und boost bind rumwirfst
-
mal ehrlich schrieb:
lern mal richtig die grundlagen vor du mit threads und boost bind rumwirfst
Da bin ich ja gerade dabei...
Nur habe ich leider weder ein gutes Buch noch ein gutes Online-Nachschlagwerk gefunden. Die einzige Quelle die google da ständig auswirft, ist boost.org - welche ich eher verwirrender als hilfreich finde.Ich hab auch zuerst versucht ohne bind auszukommen, aber Funktionspointer lassen sich allem Anschein nach nicht in allen Versionen von boost an thread-construktoren übergeben. (und structs mit überladenem ()-operator sind ja wohl nicht gerade einfacher :D)
Ich hätte nur gerne gewusst, wieso Pointer funktionieren und Referenzen nicht.
-
</Exit> schrieb:
Ich hätte nur gerne gewusst, wieso Pointer funktionieren und Referenzen nicht.
Das liegt an
boost::bind
. Dessen Parameter werden per Value übergeben undret[i]
hat den Typpair<int, char>
und nicht etwapair<int, char>&
. An die Funktion wird also eine Referenz auf diebind
-interne Kopie vonref[i]
übergeben. Bei Zeigern kein Problem, bei Referenzen schon. Die Lösung könnte boost::ref sein.
-
Ahh, vielen Dank für die hilfreiche Antwort... sogar schon mit Lösung - super