C++: Rückgabetyp stimmt nicht mit Funktionstyp überein?

1 Antwort

Du hast in beiden Funktionen (Funktionsstärke und Funktionsgeschwindigkeit) einen Return-Wert, der nicht "void" ist, aber der Prototyp verlangt einen Return "Void". Entweder Prototyp und Funktionsdeklaration ändern oder Return entfernen (nutzt du eh nicht).

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems
DasViereck33 
Fragesteller
 07.05.2020, 12:51

Danke, brauch ich denn return nicht wenn ich das Ergebniss am bildschirm ausgeben möchte?

Das Problem mit dem "AUsdruck muss ein änderbarer lvalue sein" kapier ich noch nicht, danke.

0
Gehilfling  07.05.2020, 12:54
@DasViereck33

Zur Ausgabe musst du die Variable wieder als cout ausgeben. Das mit dem änderbaren lvalue heißt, du schreibst einen Wert, der nicht geändert werden darf. ist normalerweise beim Schreiben auf "const" der Fall.

0
DasViereck33 
Fragesteller
 07.05.2020, 12:58

wie du im code siehst hab ich für die beiden Variablen Geschwindigkeit und Stärke keinen Konstanten wert eingegeben, warum bekomme ich trotzdem denn lvalue fehler?

0
DasViereck33 
Fragesteller
 07.05.2020, 13:49
@DasViereck33

habe das Problem gelöst, obwohl ich nicht verstehe warum es einen unterschied macht wenn ich die zuweisung am Anfang oder am ende der Funktion anfüge, aber wenn ich sie am anfang setze funktioniert das Programm:

#include <iostream>

using namespace std;

int Stärke;

float Geschwindigkeit;

int Steigerung;

float neueGeschwindigkeit;

int neueStärke;

int Funktionstärke (int Stärke, int Steigerung);

float Funktiongeschwindigkeit (float Geschwindigkeit,float Steigerung);

int main()

{

   cout << "Stärke abfragen" << endl;

   cin >> Stärke;

      cout << "Geschwindigkeit abfragen" << endl;

      cin >> Geschwindigkeit;

      cout << "Steigerung abfragen" << endl;

      cin >> Steigerung;

      Funktionstärke (Stärke, Steigerung);

      cout << "Stärke:" << neueStärke << endl;

      Funktiongeschwindigkeit (Geschwindigkeit, Steigerung);

      cout << " Geschwindigkeit:" << neueGeschwindigkeit << endl;

      return 0;

}

int Funktionstärke(int Stärke, int Steigerung)

{

   neueStärke = Stärke + Stärke * Steigerung / 100;

   return neueStärke;

}

    float Funktiongeschwindigkeit(float Geschwindigkeit, float Steigerung)

{

       neueGeschwindigkeit = Geschwindigkeit + Geschwindigkeit * Steigerung / 100;

       return neueGeschwindigkeit;

}

ausserdem braucht man denn return befehl da sonst kein WErt zurückgegeben wird denn man ausgeben könnte.

0
Gehilfling  07.05.2020, 15:20
@DasViereck33

Wenn du ihn brauchst, musst du ihn natürlich auch im Prototypen definieren.

Das Problem war wohl, dass du auf der linken Seite einer Zuweisung Operationen durchführst:

 Stärke + (Stärke * Steigerung / 100) = (int)neueStärke;

Das war nicht erlaubt. Das hast du jetzt auch behoben.

0