Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.06.2013, 14:46

Peinliche Anfängerprobleme

Hey Spieleprogrammiergemeinde,
ich steh grad vor einem kleinem problemchen. Ich bin einfach zu blind den fehler zu sehen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef _ENGINE_H
#define _ENGINE_H

#include <SFML\Graphics.hpp>

class Engine {
private:
    int tileSize;
    sf::Vector2i videoSize;
    sf::RenderWindow window;
    void MainLoop();
    void RenderFrame();
    int gamestate;

public:
    void init();
    Engine(int w, int h, int tileSize);
    ~Engine();

    int getGamestate();
    void setGamestate(int gs);

    const enum eGameState {
        SPLASH, MENU, GAME, PAUSE
    };
};
#endif


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "Engine.h"
#include "Events.h"

Engine::Engine(int w, int h, int tileSize) {
    videoSize = sf::Vector2i(w, h);
    this->tileSize = tileSize;
    gamestate = GAME;
};

Engine::~Engine() {

};

void Engine::init() {
    window.create(sf::VideoMode(videoSize.x, videoSize.y, 32), "RPG");
    window.setFramerateLimit(300);
    MainLoop();
};

void Engine::MainLoop() {
    while (window.isOpen()) {
        processInput(window);
        RenderFrame();
    }
};

void Engine::RenderFrame() {
    window.display();
};

int Engine::getGamestate() {
    return gamestate;
};

void Engine::setGamestate(int gs) {
    gamestate = gs;
};

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "Events.h"
#include "Engine.h"

void processInput(sf::RenderWindow& window) {
    sf::Event evt;
    if (Engine::getGamestate() == Engine::GAME) { //<- hier liegt der hund begraben
        while (window.pollEvent(evt)) {
            if (evt.type == sf::Event::Closed) {
                window.close();
            }
        }
    }
};

ich habe mal die zeile markiert die mir als fehler ausgegeben wird.
die frage ist, wieso mir der compiler mir sagt dass ein nicht statische rmemberverweib relativ zum objekt sein muss

ist es eine schlichte getmethode, ich verstehe einfach nicht wieso es nicht klappt oO

hoffe ihr könnt mir helfen

mit freundlichem gruß KrayZee

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »KrayZee« (17.06.2013, 15:13)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

17.06.2013, 14:54

Du benutzt eine nicht-statische Methode als sei sie statisch (Typ::Methode), statt sie über die Instanz aufzurufen (Instanz.Methode).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

17.06.2013, 15:00

mache ich es auf diese weise wird mir angegeben dass der ausdruck ein boolschen typ aufweisen muss oder zumindest darin konvertierbar sein muss. da getGamestae einen integer zurückgibt und engine::game ebenfalls ein enum-attr. ist sollte der vergleich doch möglich sein oder sehe ich da etwas falsch?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

17.06.2013, 15:01

Ein enum ist ein enum und kein int. Du solltest da eGameState statt int verwenden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

17.06.2013, 15:06

Zusätzlich zu BCs Antwort ist es bei nachfragen in einem Forum sehr hilfreich, Compilerfehlermeldungen direkt anzugeben (inklusive Fehlernummer) und nicht zu umschreiben.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

17.06.2013, 15:11

Vor allem auch die Zeilennummer. Außerdem gibt es [cpp]...[/cpp] und nicht nur [code]...[/code]. ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

17.06.2013, 15:12

Ein enum ist ein enum und kein int. Du solltest da eGameState statt int verwenden.
könntest du das etwas genauer beschreiebn ich blick da grad echt nicht durch^^

edit: code durch cpp tag ersetzt, sorry :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

17.06.2013, 15:24

Du sollst statt int dein enum verwenden. Wenn du eine Enumeration für Game States anlegst, dann kann die Variable die den Status speichern ja genau so gut von diesem Typ sein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige