C++: Rückgabetyp stimmt nicht mit Funktionstyp überein?
Ich habe das Problem, dass mir beim Kompilieren angezeigt wird, dass nach dem return der Rückgabetyp nicht mit dem Funktionstyp übereinstimmt. Außerdem wird bei der Funktion bei der Variable Stärke und Geschwindigkeit angezeigt, dass der Ausdruck ein änderbarer lvalue sein muss.
Ich verstehe nicht, was der Compiler von mir will.
#include <iostream>
using namespace std;
int Stärke;
float Geschwindigkeit;
float Steigerung;
float neueGeschwindigkeit;
int neueStärke;
void Funktionstärke(int Stärke, float Steigerung);
void 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);
Funktiongeschwindigkeit(Geschwindigkeit, Steigerung);
return 0;
}
void Funktionstärke(int Stärke, float Steigerung, int neueStärke)
{
Stärke + (Stärke * Steigerung / 100) = (int)neueStärke;
return neueStärke;
}
void Funktiongeschwindigkeit(float Geschwindigkeit, float Steigerung, float neueGeschwindigkeit)
{
Geschwindigkeit + (Geschwindigkeit * Steigerung / 100) = neueGeschwindigkeit;
return neueGeschwindigkeit;
}
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).
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.
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?
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.
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.
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.