expected ‘;’ before ‘{’ [gelöst]
-
Moin zusammen,
ich finde das fehlende Semikolon einfach nicht. Vielleicht könnt ihr mir ja dabei helfen.
#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 () { lowLetter() { std::cout <<answer; } return 0; }Fehlermeldung:
main.cpp: In function ‘int main()’: main.cpp:16:5: error: expected ‘;’ before ‘{’ token { ^Danke im Vorraus.
Gruß,
-
Du kannst ja auch schwer was finden was fehlt. Falls du meinst du findest die Stelle nicht wo es fehlt... die steht doch schon genauestens in der Fehlermeldung?!?
Natürlich ist dein Programm nach Einfügen des fehlenden ; immer noch nicht korrekt. z.B. weil der Bezeichner
answerinnerhalb vonmainkeine Bedeutung hat. Aber das ist dann wieder ein anderes Problem.
-
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:5heisst: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 wasanswerda 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 sollanswerhier 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.
answerwird inlowLetterals Name für eine Variable verwendet, und hat daher dort eine Bedeutung. Innerhalb vonmaingibt es aber nichts wasanswerheisst, 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ürdereturntun.
-
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
trallalakönntest du natürlich wiederanswerschreiben, 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!