Problem mit FizzBuzz Aufgabe in Entwicklerheld
-
Hallo erstmal,
wie der Überschrift zu entnehmen ist, habe ich ein Problem mit der FizzBuzz Aufgabe bei Entwicklerheld. Im entsprechenden geht es mit um die Fehlermeldung, welche ich nicht deuten kann.
Angemeldet habe ich mich dort nur um Aufgaben zum Programmieren zu haben, da mir bisher immer die Inspiration und Muse gefehlt hat Programmieren zu lernen.Mein Code:
#include <Fizzbuzz.hpp>
#include <iostream>using namespace std;
int main() { string Fizzbuzz::fizzbuzz(int number); for (int i = 1; i <= 100; i++) { if (i % 15 == 0) cout << i << "fizzbuzz"; else if (i % 3 == 0) cout << i << "fizz"; else if (i % 5 == 0) cout << i << "buzz"; else cout << i << ""; }
}
Die Fehlermeldung:
Error occurred with status 400: /data/task-data/src/Fizzbuzz.cpp: In function 'int main()':
/data/task-data/src/Fizzbuzz.cpp:11:34: error: qualified-id in declaration before '(' token
11 | string Fizzbuzz::fizzbuzz(int number);
| ^
make[3]: *** [src/CMakeFiles/Fizzbuzz_lib.dir/build.make:63: src/CMakeFiles/Fizzbuzz_lib.dir/Fizzbuzz.cpp.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:109: src/CMakeFiles/Fizzbuzz_lib.dir/all] Error 2
make[1]: *** [Makefile:95: all] Error 2Vielen Dank schon einmal für die Hilfe, und Anregungen.
-
Was soll
string Fizzbuzz::fizzbuzz(int number);
deiner Meinung nach denn bedeuten?Möchtest du Funktionen für eine Klasse
Fizzbuzz
definieren, so müssen diese außerhalb einer anderen Funktion (wie z.B.int main()
) definiert werden.
Mit welchem Buch (oder Tutorial) lernst du denn C++?
-
Das Versuche ich derzeit herauszufinden, wie die Klasse definiert wird. Das war von der Plattform schon vorgegeben und ich habe tölpelhaft versucht sie in meinen Code mit unterzubringen.
Wie definiert man den so eine Klasse? Ich hatte die Zeile vorher auch schon außerhalb der int main() Funktion stehen gehabt.
Da kommt dann diese Fehlermeldung:'static std::string Fizzbuzz::fizzbuzz(int)' outside of class is not definition
Ich lerne C++ gerade mit verschiedenen Videos auf Youtube (wie z.B. die Videos von Pilzschaf) und den Resten meiner Java Kenntnisse, welche mir gefühlt weniger helfen als erwartet xD
Im übrigen, dieser Code war schon vorgegeben:
#include "Fizzbuzz.hpp"
string Fizzbuzz::fizzbuzz(int number){
//Implement this
return "";
}
-
Hast du Zugriff auf die Datei
Fizzbuzz.hpp
?Dabei handelt es sich um eine Header Datei, in welcher die Klasse
Fizzbuzz
deklariert ist. Diese Klasse hat eine Methodefizzbuzz
mit der Signaturstring fizzbuzz(int)
. Sie nimmt also einen int als Parameter und gibt einen String zurück.In der
.cpp
Datei (das ist die, die du grade bearbeitest / vorgegeben war) musst du noch den Inhalt der Methode schreiben. Es wird häufig so gemacht, ist aber nicht notwendig, dass man so eine Aufteilung in Header und Cpp Datei hat.In der Cpp Datei definierst du die Methode, indem du der Signatur den Namen der Klasse und den operator
::
vor den Namen der Methode hinzufügst. Also sprich:
string Fizzbuzz::fizzbuzz(int number)
=> Man beachte dasFizzbuzz::
außerdem fügst du der Methode einen Körper mit der Implementierung hinzu:
string Fizzbuzz::fizzbuzz(int number) { // Hier kommt die Implementierung rein, welche am Ende einen String zurückgegeben sollte entsprechend der Signatur }
Wie du sehen kannst ist das genau der Teil, der dir schon vorgeben wurde. Deine Aufgabe ist es also:
-
Den Inhalt für die Methode
fizzbuzz
zu schreiben. Die Methode bekommt eine Nummernumber
als Parameter. Das ist deini
im Ursprungspost. Dann kommt die Logik, die du oben schon hattest (Note: Nicht geprüft, ob diese korrekt ist). Aber du sollst die Strings nicht ausgeben, sondern zurückgeben! Das nennt man auch Aufgabenteilung (Seperation of concerns) oder Abstraktion. Du schreibst eine Methode, welche für eine spezifische Nummer dir ausgibt, ob sie ein fizzbuzz oder fizz oder buzz ist. Dort ist also die Logik gekapselt. Die Ausgabe in der Konsole etc. macht eine andere Mehtode. Deine Methode hat damit eine fest definierte Aufgabe und kann sich z.B. auch leicht testen lassen. -
Du schreibst eine
main
Methode, der Einstieg in dein Programm. Die kann, muss aber nicht, in genau der selben Datei stehen als eigene Methode. In dieser erzeugst du ein Objekt der KlasseFizzbuzz
. Dann kommt deine Schleife mitfor (int i = 1; i <= 100; i++)
und in dieser rufst du auf dem Objekt die Methodefizzbuzz
auf.
Ansonsten noch was allgemeines. Youtube Videos sind in vielen Fällen schlecht zum Lernen. Das kannst du als Anfänger aber häufig schwierig beurteilen. Frag gerne nach oder such im Forum nach Threads für eine Empfehlung von Büchern, Videos etc.
Für Bücher gilt übrigens dasselbe wie für Videos ... auch hier gibt es häufig schlechte Bücher. Es ist allerdings nicht so leicht ein Buch zu veröffentlichen wie ein Video ... also ist die Quote evtl. ein bisschen besser
-
-
@saisai sagte in Problem mit FizzBuzz Aufgabe in Entwicklerheld:
Im übrigen, dieser Code war schon vorgegeben:
#include "Fizzbuzz.hpp"
string Fizzbuzz::fizzbuzz(int number){
//Implement this
return "";
}Warum übernimmst du ihn dann nicht so, wie er da steht?