Hilfe: Funktion in Funktion aufrufen wie? / Einfaches Kurzprojekt



  • 🙂 ok und jetzt: void alle(float a, flaot b).

    Suseplus schrieb:

    @Deathwatcher

    Dann bekomme ich ein a - undeclared

    @errno_h

    Auch bei Deinen beiden Varianten erhalte ich ein a - undeclared

    Beide Fehler genau in der Zeile:

    cout <<"Das Ergebnis der Addition lautet: "<<addition(a,b) <<endl;
    

    Auch ein

    Void alle(float,float)
    

    davor brachte leider nichts.



  • main.cpp: Zeilennr. Warnung: return statement with a value in function delcared with
    a void return type
    main.cpp: In function 'int main():
    main.cpp Zeilennr. error too few arguments to function 'void alle(float, float)'



  • einen normalen Funktionsaufruf wie "addition" bekommst du wunderbar gebacken.
    Hilft es vll. dass "alle" auch ein normaler Funktionsaufruf ist, der evtl. Parameter braucht?



  • mach das return in void alle weg un compiler si glücklich...
    void heist KEIN return

    Mfg shade37337



  • schreib einfach float alle(float a, float b)
    {
    return a+b;
    }



  • Habs nun wie folgt gemacht, was aber immer noch alles merkwürdig ist:

    Oben:

    int alle(float a, float b){
    cout <<"Das Ergebnis der Addition lautet: "<<addition(a,b) <<endl;
    return 0;
    }

    Unten:
    cout <<alle()<<endl;

    Problem ist nun aber noch, das ich eine Zeile unter meinem Ergebnis die 0 vom return 0 ausgegeben bekomme.

    Nehme ich das return 0; oben raus, erhalte ich eine lange komische Zahl, anstelle der 0. Sowohl mit int alle() als auch mit float alle() kommt zumindest das Ergebnis korrekt heraus, mit void alle() erhalte ich ja nur Fehler.

    Wieso muss ich in alle() oben noch mal die Parameter der anderen Funktion definieren? Eigentlich will ich doch nur eine bereits definierte Funktion aufrufen, in der die entsprechenden Parameter ja definiert wurden.

    UPDATES:

    Mit

    void alle(float a, float b){
    cout <<"Das Ergebnis der Addition lautet: "<<addition(a,b) <<endl;
    }
    

    erhalte ich unten in:

    cout<<alle(a,b)<<endl;
    

    den Fehler:
    main.cpp Zeilennr. error: no match for 'operator<<' in 'std::cout<<alle(float,
    float)(a, b)'

    schreib einfach float alle(float a, float b)
    {
    return a+b;
    }

    Das geht leider so nicht, hatte ich auch schon testweise mal. Ich will ja mehrere Anweisungen mit Text ausgeben lassen und nicht nur eine.
    return a+b
    return a-b
    etc.

    scheint ja zusammen nicht machbar zu sein. Außerdem würde ich dann die bereits definierten Funktionen nicht mehr benutzen. Ob das wirklich notwendig für eine smarte Lösung der Aufgabe ist, weiß ich allerdings noch nicht.



  • lies bitte was über variablen scope 😉



  • Das geht leider nicht, soweit bin ich im Lehrbuch noch nicht. Ich kann keine Lösung vorweisen, mit Stoff, den ich noch gar nicht kennen kann/darf.



  • dann mache nichts im voraus ;-). mach schritt für schritt. und noch was habe folgendes geschrieben return a+b; nicht return 0; weißt du überhaupt was das heißt?



  • Ich mache ja nichts im Vorraus, genau diese Aufgabe ist jetzt dran und in der nächsten Lektion geht es mit scope weiter.

    Ja logisch weiß ich das. Return 0 heißt gebe nichts aus. Steht ja auch in Main() immer am Ende. Nur leider gibt es bei mir jetzt eine 0 aus, anstatt nichts.

    return a + b gibt natürlich das Ergebnis der addierten eingegebenen a und b Werte aus. Wie schon erwähnt hatte ich dies schon mal fertig gemacht, aber wieder verworfen da in der nächsten Zeile ein return a - b zum Fehler führte.

    Aufgrund der vielfältigen Versuche und das nichts wirklich so funktioniert hat, wie es sollte, mit der Funktion in der Funktion, bin ich nun auch auf Lösungssuche, abseits der bisher gelernten Regeln. (Aber nur mit den bisher gelernten Befehlen)



  • deine aufgabe hat mir keine logik. du schreibst zweimal die selbe funktion addition und alle machen das selbe. hie ist ein beispiel:

    float addition(float a, float b)
    {
      return a+b;
    }
    float subtraktion(float a, float b)
    {
      return a-b;
    }
    
    int main()
    {
      float a=4, b=23.2;
      cout << "ADD: " << addition(a,b) << endl;
      cout << "SUB: " << subtraktion(a,b) << endl;
      // oder
      cout << "funk in funk: " << addition(addition(a,b),subtraktion(a,b)) << endl;
    
      return 0;
    }
    

    by the way: return 0 heisst nicht gebe nichts aus sondern gebe 0 zurück, dass heisst dass die funktion irgendeinen wert zurückliefert.



  • Also ich sollte in der ersten Aufgabe ein Programm schreiben, mit den 4 Grundrechenarten. Ich habe es hier mal verkürzt wiedergegeben, weil das funktioniert ja einwanfrei. In der nächsten Ausgabe soll ich dieses Programm so erweitern, dass mit einer zusätzlichen Funktion alle Rechenarten mit Ergebnis auf einmal ausgegeben werden.



  • Suseplus schrieb:

    Also ich sollte in der ersten Aufgabe ein Programm schreiben, mit den 4 Grundrechenarten. Ich habe es hier mal verkürzt wiedergegeben, weil das funktioniert ja einwanfrei. In der nächsten Ausgabe soll ich dieses Programm so erweitern, dass mit einer zusätzlichen Funktion alle Rechenarten mit Ergebnis auf einmal ausgegeben werden.

    deklariere 2 globale vars,anschl.übergibst du die ergebnisse den globalen vars.mit der letzten funktion definierst du die ausgabe,also die ausgabe der 2 globalen vars.
    müßte so klappen...



  • #include <iostream>
    
    using namespace std;
    
    float addition(float a, float b)
    {
    return (a + b);
    }
    float subtraktion1(float a, float b)
    {
    return (a - b);
    }
    
    void alle(float a, float b)
    {
    cout <<"Das Ergebnis der Addition lautet: " << addition(a,b) <<endl; 
    }
    
    int main(){
    
    float a;
    float b;
    char Auswahl;
    
    cout <<"Bitte geben Sie den Wert a ein: ";
    cin >> a;
    cout <<"Bitte geben Sie den Wert b ein: ";
    cin >> b;
    cout <<'\n';
    cout <<"Bitte wählen Sie nun die Art der Rechenoperation:"<<endl;
    cout <<"a Addition a + b"<<endl;
    cout <<"b Subtraktion_1 a - b"<<endl;
    cout <<"c Alle Rechenoperationen"<<endl;
    cout <<'\n';
    cout <<"Bitte treffen Sie Ihre Auswahl: ";
    cin >>Auswahl;
    
    switch(Auswahl) {
    case 'a':
    cout <<"Das Ergebnis von "<<a <<" + "<<b <<" lautet: "<<addition(a,b)<<endl;
    break;
    
    case 'b':
    cout <<"Das Ergebnis von "<<a <<" - "<<b <<" lautet: "<<subtraktion1(a,b)<<endl;
    break;
    
    case 'c':
        alle(a,b);
        break;
    }
    
    return 0;
    }
    

    Probiers mal so.



  • Deathwachters Code funktioniert nun sauber ohne Fehler und der Ausgabe unnützer Zeichen.

    Danke Danke Danke



  • Und dann vergleiche mal bitte seinen und deinen Code.
    Dann werden dir die Fehler schon auffallen!



  • Es ist eine Frage der Kombination der Codeteile.

    Einzeln hatte ich es schon öfter so, aber oben und unten hatte ich aufeinmal anscheinbar nie diese Code gehabt.

    Letztenendes war das wichtigste nun wohl doch der Verzicht auf das cout unten und der Aufrauf einfach nur mit alle(a,b);



  • Demach weißt du also noch nicht so genau was "cout" macht, oder?



  • Na cout steht für die Ausgabe von dem Nachfolgenden Text/Variablen. Sicher gibt es natürlich wieder noch eine genauere Definition und Sonderregeln.



  • Suseplus schrieb:

    Na cout steht für die Ausgabe von dem Nachfolgenden Text/Variablen.

    Okay.

    Und jetzt überlege dir wieso Folgendes nicht geht:

    void add(int a, int b)
    {
     cout<<a+b<<endl;
    }
    
    ...
    
    int main()
    {
     ...
     cout<<add(12,2);
     ...
    }
    

Anmelden zum Antworten