Klassen verständniss frage



  • Ich bastel an meinem C++ Verständiss herum.
    und bin mal wieder auf ein mir unverständliches Problem gestossen.
    Damit es nicht immer nur auf der Konsole passiert habe ich mir die SFML Bibliothek installiert.
    Nun habe ich ein kurzes Programm geschrieben welches noch recht sinnfrei ist.
    Trotzdem stoße ich hierbei auf eine Fehlermeldung welche ich mir nicht ganz erklären kann.
    Hier der code

    #include <SFML/Graphics.hpp>
    
    /* Klasse Feld diemt zur Darstellung des Spielfeldes, integer Variablen ***x,***Y, inhalt
        Die größe des Feldes soll später variabel sein
    */
    class Feld{
    
     public:
     Feld(int cx,int cy, int ct);
     private:
     int laengex,laengey,inhalt;
    
    };
    
    Feld::Feld(int cx,int cy,int ct):
    laengex(cx),laengey(cy),inhalt(ct)
    {
       shape.setPosition(laengex,laengey);// Position und Farbe des Blocks soll in der Klasse geändert Werden
        shape.setFillColor(sf::Color(100,100,100)) ;// Farbe soll per Inhalt Variable geändert werden
    }
    ;
    // Hauptschleife die grafikfunktionen dienen zuerstz einmal als test
    int main()
    {
        sf::RenderWindow window(sf::VideoMode(800, 600,32), "Break1");
        sf::RectangleShape box;
        box.setSize(sf::Vector2f(40,40));
        box.setPosition(400,400);
        box.setFillColor(sf::Color(33,155,200));
    
        sf::CircleShape shape(20.f);// Versuchs Dummys
        shape.setPosition(13,200);//
        shape.setFillColor(sf::Color(33,55,100));//
    
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
    //Spielfeldfarbe weiß
            window.clear(sf::Color(255,255,255));
            window.draw(box);
            window.draw(shape);
            window.display();
        }
    
        return 0;
    }
    

    Mein Compiler meckert :
    [list]
    main.cpp: In Konstruktor »Feld::Feld(int, int, int)«:
    main.cpp:18:4: Fehler: »shape« wurde in diesem Gültigkeitsbereich nicht definiert
    make: *** [test] Fehler 1
    [/list]
    Ich verstehe nicht ganz warum in der Klasse Feld die Memberfunktion shape nicht deklariert sein soll.
    Wäre nett wenn ihr mir helfen könntet...



  • Hier mal für alle das ganze in richtigen Tags und formatiert:

    #include <SFML/Graphics.hpp>
    
    /* Klasse Feld diemt zur Darstellung des Spielfeldes, integer Variablen ***x,***Y, inhalt
    Die größe des Feldes soll später variabel sein
    */
    class Feld
    {
    
    public:
    	Feld(int cx,int cy, int ct);
    private:
    	int laengex,laengey,inhalt;
    
    };
    
    Feld::Feld(int cx,int cy,int ct):
    	laengex(cx),laengey(cy),inhalt(ct)
    {
    	shape.setPosition(laengex,laengey);// Position und Farbe des Blocks soll in der Klasse geändert Werden
    	shape.setFillColor(sf::Color(100,100,100)) ;// Farbe soll per Inhalt Variable geändert werden
    }
    ;
    // Hauptschleife die grafikfunktionen dienen zuerstz einmal als test
    int main()
    {
    	sf::RenderWindow window(sf::VideoMode(800, 600,32), "Break1");
    	sf::RectangleShape box;
    	box.setSize(sf::Vector2f(40,40));
    	box.setPosition(400,400);
    	box.setFillColor(sf::Color(33,155,200));
    
    	sf::CircleShape shape(20.f);// Versuchs Dummys
    	shape.setPosition(13,200);//
    	shape.setFillColor(sf::Color(33,55,100));//
    
    	while (window.isOpen())
    	{
                    sf::Event event;
                    while (window.pollEvent(event))
                            if (event.type == sf::Event::Closed)
                                    window.close();
    
    //Spielfeldfarbe weiß
                    window.clear(sf::Color(255,255,255));
                    window.draw(box);
                    window.draw(shape);
                    window.display();
    	}
    }
    


  • Ich verstehe nicht ganz warum in der Klasse Feld die Memberfunktion shape nicht deklariert sein soll.

    Also entweder du bist einer von Jürgen Wolfs Opfern, oder ganz klar Troll.

    Dir ist schon klar, dass du eine Memberfunktion deklarieren musst, damit sie dann deklariert ist?
    Und dass du shape als eine Variable vom Typ einer Klasse behandelst, und nicht als Funktion?



  • @sone
    du hast mich ertappt.

    Ich bin ein Jürgen wolf Opfer ..
    Und mag nur ab und zu Fisch... 😉



  • Da hab ich mich wohl falsch ausgedrückt.
    shape ist eine Funktion der SFML Bibliothek.
    mein Problem besteht dadrin das die Funktion shape in meiner main funktion funktioniert aber nicht mehr in der Feld Klasse.

    Wenn ich die Feldfunktion auskommentiere wird ohne Fehlermeldung kompiliert.



  • shape ist keine Funktion.



  • Danke manni66 für deine tolle Hilfe.

    Und warum funktioniert das konstrukt in der Zeile 33-34 und in den Zeilen 19-20 nicht ??

    Jetzt kommt sicher das ist kein konstrukt sondern ..... 🙄 🙄



  • shape ist eine Funktion der SFML Bibliothek.

    shape.setPosition(laengex,laengey);// Position und Farbe des Blocks soll in der Klasse geändert Werden
        shape.setFillColor(sf::Color(100,100,100)) ;// Farbe soll per Inhalt Variable geändert werden
    

    Warum rufst du es/sie dann wie ein Objekt auf?

    Ich bin ein Jürgen wolf Opfer ..

    Wobei die Frage von Sone doch angebracht war.

    Oder doch Troll..?



  • Und warum funktioniert das konstrukt in der Zeile 33-34 und in den Zeilen 19-20 nicht ??

    Jetzt kommt sicher das ist kein konstrukt sondern .....

    Schön, wie ernst du das nimmst.

    sf::CircleShape shape(20.f);// Versuchs Dummys
        shape.setPosition(13,200);//
        shape.setFillColor(sf::Color(33,55,100));//
    

    Dreimal darfst du raten, wieso er hier ein Objekt namens shape findet. Hinweis: es ist vom Typ CircleShape !

    Entweder das ist tatsächlich ein Troll oder du hast keinen Plan, was du da eigentlich tust geschweige denn, was du hier fragst.



  • stichwort lebensdauer, gültigkeitsbereich und sichtbarkeit von variablen.

    stell dir mal vor, du machst deine variable shape in der main funktion weg. und deine klasse willst du trotzdem benutzen. und das vielleicht an anderer stelle.
    ode du gibst deine tolle klasse fertig kompiliert deinem nachbarn, der sie nutzen will (mit fertig kompiliert will ich ausdrücken, er sieht den quellcode nicht und kennt auch keine internas).

    nun wird ein objekt dieser klasse irgendwo erzeugt und benutzt. geht das?
    nein natürlich nicht, weil diese shape variable nicht da ist. und was sagt dein nachbar? der kann das nicht wissen und wird lange nach dem fehler suchen. (programm-code sollte komplett geschrieben werden können und kompiliert werden können. man soll nicht erst beim compilem merken, oh da muss noch das und das und das dazu. naja jedenfalls in der theorie)

    also kurzum:
    in deiner klasse ist shape gar nicht sichtbar. und jede halbwegs vernünftige IDE sollte dir das auch rot unterstreichen und naja die fehlermeldung hast du ja. und die sagt sehr viel aus.

    echt jürgen wolff gelesen?
    führt der überhaupt klassen und objekt orientierung ein? oder war das in dem buch über gimp? ne war in dem photoshop elements buch 😃
    (ich frag mich grad wie so ein typ so viele bücher rausbringen kann. liest da keiner mehr drüber?



  • Danke Skym0sh0
    jetzt hab ichs verstanden.

    Jürgen Wolff hab ich nicht ganz durchgelesen.
    Zur Zeit helf ich mir dem C++ Wikibook aus.
    UNd c++ und 21 Tagen von jesse ???
    Na ja muß mir wohl mal ein aktuelles Buch kaufen. 🤡



  • und auch bücherempfehlungen findest du hier im forum zu hauf.
    etwas weiter unten müsste noch ein etwas aktueller thread sein.

    klickst du hier

    nicht zu empfehlen sind wolffs bücher, willms ist nicht wirklich gut (bissle C mit klassen) und alles was in "21 tagen" geht ist auch nicht der bringer(es sei denn das buch heisst: "wie kann ich in 21 tagen 21tage lang leben" oder so :D)


Anmelden zum Antworten