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

21

27.07.2011, 00:03

Ist mir klar, dann hab ich was durcheinandergewürfelt.

Jetzt bekomme ich aber andere Fehler den ich noch nie hatte.

C:\Users\Matthis\Desktop\Autospiel\Gegner.hpp|17|error: ISO C++ forbids declaration of 'Game' with no type|
C:\Users\Matthis\Desktop\Autospiel\Gegner.hpp|17|error: expected ';' before '*' token|
||=== Build finished: 2 errors, 0 warnings ===|

Hab nach Semikolons geschaut. Die Zeigerinstanz hab ich erstellt um halt via this auf das Image zuzugreifen, damit ich es auf den Sprite setzen kann.

In der Klasse Gegner ganz normal so deklariert:
Game *m_pGegnGaPointer;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisterX« (27.07.2011, 00:17)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

22

27.07.2011, 10:59

Für this musst du nicht extra einen Zeiger auf eine Klasse erstellen. In einer Klasse liefert dir this den Zeiger auf die aktuelle Instanz.
„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.“

23

27.07.2011, 15:40

ERROR: Game does not name a type

:thumbdown:
Das ist ja mal beknackt. Der scheint die Klasse Game nicht zu erkennen obwohl die zugehörige Headerdatei eingebunden ist. :pinch:

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

24

27.07.2011, 15:43

Du brauchst und darf den Header nicht einbinden. Eine Klassendeklaration würde völlig reichen. Abgesehen davon braucht die Gegnerklasse keinen Zeiger auf die Gameklasse. Das Image kannst du per Referenz als Parameter! übergeben...
"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?

25

27.07.2011, 15:48

Aber dann ist es doch noch in der Gegner Klasse... :wacko:
Ich hab gerade irgendwie den Faden verloren. :O


War geistig abwesend. :D

Aber nachdem ich das vollendet habe bekomme für jeden Zeiger in meiner Game-Klasse einen Fehler. Und er erkennt Gegner nicht bei der Deklaration für die Liste. ;(

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisterX« (27.07.2011, 15:59)


26

27.07.2011, 16:01

Header:

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
38
39
40
41
42
43
44
#ifndef GAME_HPP
#define GAME_HPP

#include "main.hpp"
#include "Player.hpp"
#include "Gegner.hpp"
#include "Audio.hpp"
#include "Timer.hpp"
#include <time.h>
#include <list>

class Game
{
    public:
    Game();
    void Run();
    void Quit();

    sf::Image m_GegnerImg;

    private:
    void ProcessEvents();
    void SpawnGegner();
    void CheckCollisions();
    void ZeigeAllesAn();

    Player *m_pPlayer; //Expected ";" before "*"
    Gegner *m_pGegner; //Expected ";" before "*"
    CAudio *m_pAudio; //Expected ";" before "*"

    sf::Image m_BackgroundImg;
    sf::Sprite m_BackgroundSpr;
    sf::View m_View;
    sf::RenderWindow m_RenderApp;

    int m_live;
    int m_PlayerPosition;
    int m_Gang;
    float m_fGegnerTimer;

    list<Gegner> m_GegnerList; //Gegner ist kein gültiger Bezeichner oder so was...
};

#endif

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisterX« (27.07.2011, 16:33)


27

28.07.2011, 13:09

Fehler behoben.
Was draus folgte war:

Game.cpp||In member function 'void Game::SpawnGegner()':|
Game.cpp|138|error: no matching function for call to 'std::list<Game, std::allocator<Game> >::push_back(Gegner&)'|
Codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_list.h|919|note: candidates are: void std::list<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Game, _Alloc = std::allocator<Game>]|

Und das noch 5 mal.
Codesnippe:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
m_fGegnerTimer += g_pTimer->GetElapsed();
    if(m_Gang==1)
    {
        cout << "Gang 1" << endl;
        if(m_fGegnerTimer >=2.f)
        {
            cout << "Zufall" << endl;
            srand(time(NULL));
            int GegnerPosition=rand()%6;
            switch(GegnerPosition)
            {
                case 1:
                {
                    Gegner Ggegner;
                    Ggegner.SetPosition(1);
                    m_GegnerList.push_back(Ggegner);
                    m_fGegnerTimer=0.f;
                }
                case 2:
                {
                    Gegner Ggegner;
                    Ggegner.SetPosition(1);
                    m_GegnerList.push_back(Ggegner);
                    m_fGegnerTimer=0.f;
                }
                case 3:
                {
                    Gegner Ggegner;
                    Ggegner.SetPosition(1);
                    m_GegnerList.push_back(Ggegner);
                    m_fGegnerTimer=0.f;
                }
                case 4:
                {
                    Gegner Ggegner;
                    Ggegner.SetPosition(1);
                    m_GegnerList.push_back(Ggegner);
                    m_fGegnerTimer=0.f;
                }
                case 5:
                {
                    Gegner Ggegner;
                    Ggegner.SetPosition(1);
                    m_GegnerList.push_back(Ggegner);
                    m_fGegnerTimer=0.f;
                }
                case 6:
                {
                    Gegner Ggegner;
                    Ggegner.SetPosition(1);
                    m_GegnerList.push_back(Ggegner);
                    m_fGegnerTimer=0.f;
                }
            }
            cout << "ZufallEnde" << endl;
        }
    }





Das ist der besagte Fehler der bei mir mit dem list-Gedöns geschieht. :thumbdown:
EDIT: Der Header ist noch gültig.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisterX« (28.07.2011, 14:18)


28

29.07.2011, 11:07

Ist <iostream> auch inkludiert?
Ich könnte mir vorstellen, dass in main.hpp nur SFML-Dateien inkludiert wurden, sonst hast du ja ein wildes Header-Gemetzel wenn du die überall inkludierst.
Ansonsten könnte es auch gerade daran liegen. Schau mal ob das klappt. :thumbup:

MfG
Check

PS: Und den Namespace nicht vergessen. Den Code hab ich mir jetzt nicht gesaugt, ich hab mir nur mal die Code-Ausschnitte angesehen. :D

29

29.07.2011, 11:27

Ja ist drin, ohne Header-Gemetzel. :thumbsup:
Trotzdem gibt es den schönen Fehler.

Ich weiß einfach nicht weiter. ;(

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

30

29.07.2011, 14:05

Man sollte sich die Fehlermeldung schon ein bisschen länger anschauen...
no matching function for call to 'std::list<Game, std::allocator<Game> >::push_back(Gegner&)'

Fällt dir was auf?
Der Fehler ist nur aufgetaucht weil du nicht logisch gedacht hast um den vorherigen Fehler zu lösen.

Header dürfen sich nicht gegenseitig einbinden. Bei einem include wird der Inhalt der ganzen Datei an die stelle kopiert. Damit erzeugst du also eine Endlosschleife.
Der Gegner brauch das Spiel garnicht zu kennen.
Wenn du es doch mal brauchst kannst du eine Referenz aufs Spiel übergeben und speichern wenn du Game deklariert, aber nicht eingebunden hast.

C-/C++-Quelltext

1
class Game;

Dann kannst du die game.hpp in der .cpp Datei einbinden und Game benutzen.
"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?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »NachoMan« (29.07.2011, 14:12)


Werbeanzeige