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 2

    Vielen 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 Methode fizzbuzz mit der Signatur string 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 das Fizzbuzz::

    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:

    1. Den Inhalt für die Methode fizzbuzz zu schreiben. Die Methode bekommt eine Nummer number als Parameter. Das ist dein i 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.

    2. 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 Klasse Fizzbuzz. Dann kommt deine Schleife mit for (int i = 1; i <= 100; i++) und in dieser rufst du auf dem Objekt die Methode fizzbuzz 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?


Anmelden zum Antworten