expected ‘;’ before ‘{’ [gelöst]
-
Der Compiler gibt die Stelle doch an.
-
@Richard_Wunsch sagte in expected ‘;’ before ‘{’:
lowLetter() { std::cout <<answer; }
Welchen Sinn hat dieses Konstrukt? answer ist da sicher nicht bekannt!
-
@Richard_Wunsch sagte in expected ‘;’ before ‘{’:
main.cpp:16:5
ps:
main.cpp:16:5
heisst:main.cpp
, Zeile 16, Zeichen (Spalte) 5.
-
@hustbaer Und wie löse ich dieses Problem?
-
@Richard_Wunsch Naja ... C++ lernen?
Sag mal was das machen soll, und wasanswer
da deiner Meinung nach bedeuten soll.
-
@hustbaer Versuche ich - scheinbar nicht sehr erfolgreich...
Die Funktion soll eine Eingabe innerhalb des string answers speichern, alle Großbuchstaben zu Kleinbuchstaben konvertieren und anschließend wieder ausgeben.
-
@Richard_Wunsch sagte in expected ‘;’ before ‘{’:
anschließend wieder ausgeben
Warum steht dann keine Ausgabeanweisung in der Funktion sondern ein return?
-
@hustbaer Der Sinn dahinter ist, dass man bei Antworten nicht auf Groß- und Kleinschreibung prüfen muss - also quasi so etwas:
#include <iostream> #include <algorithm> #include <string> std::string lowLetter () { std::string answer; std::getline (std::cin, answer); std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower); return answer; } int main () { std::cout << "Magst du Blumen?"; lowLetter() { if (answer == "ja") std::cout << "Wer nicht?"; else std::cout << "Schade drum"; } return 0; }
-
Hm...
In deinem Beispiel, inif (answer == "ja")
, was sollanswer
hier bedeuten?Und: Wie kommst du auf das Konstrukt
lowLetter() { ... }
Sowas gibt's in der Form in C++ nicht.
-
@hustbaer Die Antwort, die man mit
std::getline (std::cin, answer)
abgreift
-
@Richard_Wunsch sagte in expected ‘;’ before ‘{’:
@hustbaer Die Antwort, die man mit
std::getline (std::cin, answer)
abgreiftDu kannst aber die lokalen Variablen einer Funktion nicht in einer anderen verwenden.
answer
wird inlowLetter
als Name für eine Variable verwendet, und hat daher dort eine Bedeutung. Innerhalb vonmain
gibt es aber nichts wasanswer
heisst, daher bekommst du dort auch eine entsprechende Fehlermeldung.
-
@hustbaer Ich dachte zu Initalisierung benutzt man curly braces...
Ist es nicht möglich in der Funktionen einen Wert zu deklarieren und dann in die
int main ()
zu übergeben? Dachte genau das würdereturn
tun.
-
Danke, war retarded. Darauf wollte ich hinaus:
#include <iostream> #include <algorithm> #include <string> std::string lowLetter () { std::string answer; std::getline (std::cin, answer); std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower); return answer; } int main () { std::cout << lowLetter(); return 0; }
-
Genau, so sollte das gehen.
Bzw. so könnte man es auch schreiben:#include <iostream> #include <algorithm> #include <string> std::string lowLetter () { std::string answer; std::getline (std::cin, answer); std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower); return answer; } int main () { std::string trallala = lowLetter(); std::cout << trallala; return 0; }
Oder, mit den {} zur Initialisierung geschrieben:
#include <iostream> #include <algorithm> #include <string> std::string lowLetter () { std::string answer; std::getline (std::cin, answer); std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower); return answer; } int main () { std::string trallala{ lowLetter() }; std::cout << trallala; return 0; }
Statt
trallala
könntest du natürlich wiederanswer
schreiben, ginge genauso. Ich hab extra einen anderen Namen verwendet um zu zeigen dass der eine Name nichts mit dem anderen zu tun hat. Lokale Variablen und ihre Namen sind eben lokal, d.h. nicht ausserhalb ihrer Funktion vorhanden/sichtbar. (Genauer: nicht ausserhalb ihres "scopes". Und was ein "scope" ist, das liest du besser online oder im C++ Buch deiner Wahl nach.)
-
@hustbaer Mach ich. Danke für die Beispiele + Erklärung!