Vektorübergabe bei ausgelagerten Funktionen
-
Hallo,
ich habe folgendes Problem. Ich habe ein recht umfangreichs Programm für die Uni geschrieben, nun eröffnet sich aber foglendes Problem. Ich habe, damit es übersichtlicher ist, alle Funktione ausgelagert. Das sind dann 7 Stück an der Zahl. Da ich in einigen funktionen über einige Gleichungen eine Matrix ausrechne und diese ausgerechneten Matritzen in anderen Funktionen gebraucht werden habe ich die einzelnen positionen in einem Vektor gespeichert aufgrund der dynamik des Programms.
Mein Problem ist nun das ich ja per return befehl die Matrix zurück geben will, ich habe auch hier im Forum schon einiges gefunden aber irgendwie klappt das alles nicht so.
Es währe wirklich wichtig da sich alle höheren berechnungen meines Programmes auf Vektoren stützen.
Danke schonmal im voraus.
-
Zeige mal ein wenig bsp. code.
Simon
-
Kev-Man schrieb:
Hallo,
ich habe folgendes Problem. Ich habe ein recht umfangreichs Programm für die Uni geschrieben, nun eröffnet sich aber foglendes Problem. Ich habe, damit es übersichtlicher ist, alle Funktione ausgelagert. Das sind dann 7 Stück an der Zahl. Da ich in einigen funktionen über einige Gleichungen eine Matrix ausrechne und diese ausgerechneten Matritzen in anderen Funktionen gebraucht werden habe ich die einzelnen positionen in einem Vektor gespeichert aufgrund der dynamik des Programms.
Mein Problem ist nun das ich ja per return befehl die Matrix zurück geben will, ich habe auch hier im Forum schon einiges gefunden aber irgendwie klappt das alles nicht so.
Es währe wirklich wichtig da sich alle höheren berechnungen meines Programmes auf Vektoren stützen.
Danke schonmal im voraus.wie wäre es mit nem Referenzparameter?
CMatrix MyFunc(std::vector<Position> & p_Positions) { // verändere mypositions return BerechneteMatrix; }einfach folgendermaßen aufrufen:
std::vector<Position> Positions; CMatrix Matrix = MyFunc(Positions);und voila, Positions ist durch MyFunc verändert worden und kannst der nächsten deiner Funktionen übergeben.
Wenn das das war worauf du hinauswolltest ...
-
Jain nicht ganz. Also die Vektor an sich enthalten Numerische double Werte, die jeweils zur WEITEREN Berechnung gebrauct werden. Also lässt sich das folgender weise vorstellen.
erste Funktion (berechnet einen 6 Zeili Vektor)
↓
zweite Funktion (benutzt di 6 Werte zur WEITEREN Berechnung (also keine veränderung die Werte des 1 Vektors bleiben gleich. Deshalb kein Referentz?? (oder geht das trotzdem indem ich einfach den Vektor quasi kopiere oder die Referenzen kopiere oder so?)
↓
dritte Funktion (benutzt den Vektor aus der 2. Funktion und 2 Werte aus dem Vektor aus der 1. Funktion zur weiteren Berechnung eines neuen Vektors).Das quasi mein Hauptproblem. Ich hoffe ich konnte das Verständlich da legen.
-
Für sowas nimmt man normalerweise const Referenzen, die sorgen dafür, dass einerseits nicht der ganze Vektor kopiert werden muss (wie es passieren würde, wenn man per value übergibt) und andererseits den Vorteil, dass man den Vektor nicht ändern kann. Insgesamt also genau das, was du möchtest:
//Rückgabewert geraten ;) int ErsteFunktion() { std::vector<double> vec; //Kram ZweiteFunktion(vec); //Muss natürlich vorher deklariert sein //Kram } //Dito int ZweiteFunktion(std::vector<double> const &vec) { //kram } //Schon wieder int DritteFunktion(std::vector<double> const &vec, double wert1, double wert2) { //kram }Wenn du nicht die Standardvektoren, sondern zum Beispiel direkt Arrays verwendest (wobei man sich da streiten kann, ob das schön ist), sieht es vielleicht etwas anders aus. Könntest ja mal etwas Code zeigen.
Felix