Warum klappt die Funktion bei mir nicht?



  • double tb[] toleranz(std::vector<double>& obereto, std::vector<double>&
    untereto, double& maxteile){
    for (double i = 0; i < maxteile; i++) {
    tb[10] = obereto.at(i) + untereto.at(i);

    }
    return tb[10];
    

    }

    Das aktuelle Problem liegt in der ersten Zeile.
    Das Programm zeigt mir auch an das der Name der Funktion kein double sondern ein int ist.
    Ich habe schon vieles ausprobiert aber es kamen immer wieder andere Probleme hinzu. Ich würde mich freuen wenn jemand mir einen hilfreichen Kommentar da lässt wie ich das Problem lösen kann.



  • Mir ist überhaupt nicht klar, was du mit der 10 (dem tb[10] / tb[]) erreichen willst. Was soll zurückgegeben werden (Datentyp)?

    Ansonsten:

    • Es fehlt ein Kommentar, was die Funktion tun soll.
    • Warum sind deine Funktionsargumente nicht const? (bzw. warum nicht Iteratorpaare?)
    • obereto liest sich sehr schlecht. obere_toleranz wäre lesbarer. Ggf. noch auf English.
    • Warum ist es sinnvoll, "obere" und "untere" Toleranz zu addieren?
    • Warum gibt es noch das Argument maxteile (noch dazu als floating point, wo es doch eine Ganzzahl zu sein scheint)? Die vectoren kennen ihre Länge doch selbst?


  • Die Funktion soll die Werte der oberen und unteren Toleranz addieren damit man die Toleranzbreite hat.
    Die Variable "maxteile" sind die Teile mit ihren jeweiligen Nennmaß und oberer und unterer Toleranz und da ich zum Beispiel 4 obere und untere Toleranzen habe sollen diese Toleranzbreiten jeweils berechnet und wieder als Feld ausgegeben werden.



  • und der Rückgabewert soll das Feld sein als double.



  • @schlitz sagte in Warum klappt die Funktion bei mir nicht?:

    und der Rückgabewert soll das Feld sein als double.

    Warum nimmst du dafür jetzt ein rohes C-Array ind keinen Vector wie bei den anderen Werten.



  • @schlitz sagte in Warum klappt die Funktion bei mir nicht?:

    Die Variable "maxteile" sind die Teile mit ihren jeweiligen Nennmaß und oberer und unterer Toleranz und da ich zum Beispiel 4 obere und untere Toleranzen habe sollen diese Toleranzbreiten jeweils berechnet und wieder als Feld ausgegeben werden.

    Also gibt das die Anzahl der Toleranzen an?

    Gibt es auch 4.5 Teile?


  • Mod

        #include <iostream>
        #include <vector>
        #include <iterator>
        #include <algorithm>
        #include <functional>
         
        using namespace std;
         
        int main() {
        	vector<double> obere_toleranz({1.3, 5.2, 2.2, 8.1, 4.8}), 
        	               untere_toleranz({1.2, 4.3, 5.6, 4.7, 3.2});
    	transform(begin(obere_toleranz), end(obere_toleranz), begin(untere_toleranz), 
        	          ostream_iterator<double>(cout,", "), plus<>());
        }
    

    edit: Nett, ab C++14 kann man die Funktionsobjekte mit void spezialisieren, und dann erschließen sie sich automatisch die Typen. Kannte ich noch gar nicht, weil ich die so selten nutze (aber hier musste es sein, um zu zeigen, dass man keinen einzigen Ausdruck eigenen Code braucht). Warum gibt es das nicht für ostream_iterator?


Log in to reply