Rückgabetyp wird nicht erkannt



  • Hallo Com :)!

    Ich programmiere gerade ein Snake-Spiel und es läuft so weit eigentlich gut. Das einzige Problem ist, dass der compiler meinen Datentyp nicht kennt.

    Dies ist mein Header

    class Playground
    {
        public:
            struct Point
                {
                    int x;
                    int y;
                    bool operator == (Point pp)
                    {
                        return (x == pp.x && y == pp.y);
                    }
                    bool operator != (Point pp)
                    {
                        return !(x == pp.x && y == pp.y);
                    }
                };
    
            Playground              ();
            bool check_eat_fruit    (const Point& ss, const Point& ff) const;
            bool check_collision    (const Point& ss) const;
            void play               ();
            Point set_fruit         ();   //hier kein Problem
    
        private:
            Point snake;
            Point fruit;
            char directon;
            std::queue<Point> snake_history;
    };
    

    und dies ein Ausschnitt aus meiner .cpp datei:

    Point Playground::set_fruit ()    //der Rückgabetyp wird nicht erkannt
    {
        Point temp_fruit;
        do
        {
            temp_fruit.x = rand()%21;
            temp_fruit.y = rand()%40;
        }while(1);    
        return temp_fruit;
    }
    

    Die Fehlermeldung lautet:

    "Point" bezeichnet keinen Typ.
    

    Der Fehler erscheint nur, wenn ich die Funktion aus der .h datei in der .cpp datei definiere. Die Deklaration alleine macht keine Probleme. auch wenn ich den Rückgabetyp ändere (von Point nach zb. int) ist alles OK.

    Ich hoffe ich konnte mich klar ausdrücken! 🙂



  • Schreib mal Playground::Point statt Point



  • Ich würde Point nicht als inneren Typ von Playground definieren sondern auf derselben Ebene.

    ffas schrieb:

    class Playground
    {
        public:
            struct Point
                {
                    .....
                };
    
            .....
            Point set_fruit         ();   //hier kein Problem
    
        private:
            .....
    };
    

    und dies ein Ausschnitt aus meiner .cpp datei:

    Point Playground::set_fruit ()    //der Rückgabetyp wird nicht erkannt
    {
        .....
    

    Das müsste

    Playground::Point Playground::set_fruit()
    {
        .....
    

    oder

    auto Playground::set_fruit() -> Point
    {
        .....
    

    heißen. Letzteres geht erst ab C++11.



  • Richtungen kann man besser als ein enum darstellen.



  • Vielen dank! 🙂
    So gehts.
    @ krümelkacker
    Danke für den denkanstoß. Aber was ist daran besser?

    @ irgeneinname
    👍 Wird sofort geändert 🙂


Anmelden zum Antworten