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

31.01.2012, 16:55

C++ SFML Spaceshooter

Bin gerade dabei den Spaceshooter in SFML umzuschreiben. Bin am Ende angelangt, schon hab ich lauter Weise Fehler. Hier einer davon:

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
#ifndef GAME_HPP
#define GAME_HPP

#include <list>
#include <iostream>
#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>
#include "Asteroid.hpp"
#include "Player.hpp"
#include "Collision.hpp"

class CGame
{
public:
    CGame();
    bool Init();
    void Run();
    void Quit();
    float GetElapsedTime(){return m_Window.GetFrameTime();}
    sf::RenderWindow* GetWindow(){return &m_Window;}
private:
    void RenderAsteroids();
    void SpawnAsteroids();
    void CheckCollisions();
    void ProcessEvents();

    CPlayer *m_pPlayer;
    sf::RenderWindow m_Window;
    sf::Sprite m_SpriteBackground;
    sf::Image *m_pImageBackground;
    sf::Image *m_pImageAsteroid;
    float m_fElapsedTime;
    float m_fAsteroidTimer;
    std::list<CAsteroid> m_ListAsteroid;
};

#endif


hier der Fehler: 1>c:\users\denniro\documents\visual studio 2010\projects\tacklesyg\tacklesyg\game.hpp(34): error C2065: 'CAsteroid': nichtdeklarierter Bezeichner
Only God can judge me.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

31.01.2012, 17:06

Lass mich raten: Du hast in der Asteroid.hpp auch #include "game.hpp" stehen?
Das funktioniert nicht. Mit #include löst du eine Textersetzung aus. Es gäbe also eine Endlosschleife.

Versuch nicht das Projekt von C++ für Spieleprogrammierer für SFML zu übersetzen und schreibe lieber was eigenes kleines mit der SFML.
So ein Spaceshooter ist schon recht schwierig...
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

31.01.2012, 17:31

Genau das war es ;( Okey werde dann mal was anderes versuchen. Hast du vielleicht mal eine Seite, wo steht, wann man genau Speicherplatz reservieren sollte?

lg denniro
Only God can judge me.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

31.01.2012, 17:42

Dann wenn du ihn benötigst :vain:
Diesen Fehler kannst du umgehen indem du die Klasse in der Headerdatei nur deklarierst und nur Zeiger und Referenzen auf ihr verwendest/deklarierst. In der .cpp kannst du sie dann einbinden, den Speicher anfordern, die Klasse nutzen und freigeben.

Das sollte man sowieso meistens machen um Kompilerabhängigkeiten zu verringern. Sonst musst du später bei größeren Projekten immer das ganze Programm neu kompilieren wenn du nur in einer Headerdatei was geändert hast....
Sei nicht so ungeduldig, übe mit einfachen Programmen und du wirst es mit der Zeit lernen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

04.02.2012, 12:30

damit so probleme wie mit der endlosschleife mit den #include anweisungen nicht passiert, hier ein tipp:
schreibe in jede header datei
#ifndef NAME_HPP
#define NAME_HPP

class Name{};

#endif

damit stellst du sicher, dass die header dateien nur einmal eingebunden werden und es nicht in einer endlosschleife endet.

6

04.02.2012, 13:44

damit so probleme wie mit der endlosschleife mit den #include anweisungen nicht passiert, hier ein tipp:
schreibe in jede header datei
#ifndef NAME_HPP
#define NAME_HPP

class Name{};

#endif

damit stellst du sicher, dass die header dateien nur einmal eingebunden werden und es nicht in einer endlosschleife endet.

Ist ja oben ;)
Only God can judge me.

Werbeanzeige