Parameter direkt übergeben
-
Hey,
ich habe eine Frage:
Wie kann ich denn einer Funktion eine Variable übergeben, die dann nicht kopiert wird, sondern diese Variable direkt verwendet wird UND wenn ich dann die Variable verändere sie in der Funktion, in der ich sie übergeben habe auch verändert wird?
-
Bitte in reines C++ oder WINAPI Forum verschieben :>
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Referent benutzen.
void foo(int &i) { ++i; } void callfoo() { int i = 1; foo(i); ASSERT(i==2); }
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Nein, ich möchte, dass es genau umgekehrt ist. Ich gebe eine variable als Parameter an. Die Funktion speichert dann (leider nur) den Wert der Variable in einen vector ab. Jetzt möchte ich aber erreichen, dass wenn ich die Variable in der Main ändere, die bei dem erstellten Vector auch verändert wird?
Also nichtMain: int i;
Function: int i++;
Main: i ist jetzt auch eins höher, sondern:Main: int i;
Function: int i2 = i;
Main: i++;
Function i2 ist jetzt auch um eins höher.
Falls das verständlich war hehe
-
Du möchtest also in deinem vector einen Pointer auf die Variable speichern. Nur zu, geht genau so wie man es erwarten würde.
Ich sollte noch erwähnen, dass es zwar sinnvolle Anwendungen dafür gibt, ich jedoch den starken Eindruck habe, dass so ein Fall hier nicht vorliegt. Welches Problem möchtest du eigentlich lösen?
-
SeppJ schrieb:
Ich sollte noch erwähnen, dass es zwar sinnvolle Anwendungen dafür gibt
Was wäre eine sinvolle Anwendung für sowas?
-
pyhax schrieb:
SeppJ schrieb:
Ich sollte noch erwähnen, dass es zwar sinnvolle Anwendungen dafür gibt
Was wäre eine sinvolle Anwendung für sowas?
Pointer auf Objekte in anderen Containern braucht man schon häufiger, wenn man komplexere Datenstrukturen aufbaut. Das ist auch eine gute Anwendung für den klassischen, rohen, besitzlosen Pointer.
-
Naja, ich habe mir sagen wir eine minikleine "Grafikengine" für die Win32 Konsole( "echte" Grafik traue ich mich noch nicht :P) programmiert, die einzelne Elemente unterschiedlicher Form, Größe und Farbe zeichnet und auch bewegen kann; für ein TowerDefense spiel, das ich mache.
In dieser "Engine" sind zwei Klassen erhalten. Eine Element und eine Buffer Klasse.
So, nun hat die Buffer Klasse einen Vector von Typ Element in sich, der dafür da ist, um die jeweiligen Infos aus einem Element auszulesen und in einen puffer zu schreiben. Dieser puffer wird dann auf den Bildschirm gezeichnet.
Außerdem hat die Buffer noch eine Funktion "addElement", die wie der Name schon sagt, ein neues Element in den vector hinzufügt. Wenn ich jetzt in der main jedoch die Position oder sonst was des hinzugefügten Elements verändere, ändert sich ja im vector in der Klasse Buffer nichts, da es ja nur eine Kopie ist und somit sich das Bild auch nicht ändert. Ja...dafür bräuchte ich das.
-
Klingt irgendwie seltsam ... Du hast also viele Elemente. Und die hast Du doppelt, einmal in einem Vektor, und dann - irgendwie - "in der main"?
Wie verwaltest Du die denn "in der main"?
-
So gehts: http://ideone.com/TOWq8
-
Belli schrieb:
Klingt irgendwie seltsam ... Du hast also viele Elemente. Und die hast Du doppelt, einmal in einem Vektor, und dann - irgendwie - "in der main"?
Wie verwaltest Du die denn "in der main"?ja genau darum möchte ich ja keine Kopie von diesen im vector haben sondern DAS Element
-
pyhax schrieb:
So gehts: http://ideone.com/TOWq8
Vielen Dank!
EDIT: Gibt jetzt nur ein Problem:
die funktion deleteElement will jetzt nicht mehr...
Genauer gesagt die Funktion .erase von dem Element* vector.*iter = *ElemArr.at(i); ElemArr.erase(iter);
Fehler:
'std::_Vector_iterator<_Myvec> std::vector<_Ty>::erase(std::_Vector_const_iterator<_Myvec>)': Konvertierung des Parameters 1 von 'std::_Vector_iterator<_Myvec>' in 'std::_Vector_const_iterator<_Myvec>' nicht möglich 1> with 1> [ 1> _Myvec=std::_Vector_val<Element *,std::allocator<Element *>>, 1> _Ty=Element * 1> ] 1> and 1> [ 1> _Myvec=std::_Vector_val<Element,std::allocator<Element>> 1> ] 1> and 1> [ 1> _Myvec=std::_Vector_val<Element *,std::allocator<Element *>> 1> ] 1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
-
*iter = *ElemArr.at(i); ElemArr.erase(iter);
Zeig doch mal etwas meht code. Vlt denn der funktion deleteElement?
-
hat sich erledigt...
habe vergessen einen iterator von Element* zu machen... hab ihn ausversehen von Element gemacht :>
naja jedenfalls danke Leute