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

Oliver-Ginster

unregistriert

1

11.10.2010, 00:16

Fehlermeldung CGame::{ctor} + SDL_main

Ich probier gerade einiges aus und wollte mal schauen ob es bis zu diesem Zeitpunkt keine Probleme gibt.
Offensichtlich gibt es eins bei dem ich grad nicht weiter weiß...


1>------ Erstellen gestartet: Projekt: sdl03, Konfiguration: Debug Win32 ------
1>Der Buildvorgang wurde am 10.10.2010 23:29:24 gestartet.
1>InitializeBuildStatus:
1> Aktualisieren des Timestamps von "Debug\sdl03.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>main.cpp(4): error C2628: 'CGame' gefolgt von 'int' unzulässig (Semikolon ';' vergessen?)
1>main.cpp(5):
error C2556: 'CGame SDL_main(int,char *[])': Überladene Funktion
unterscheidet sich nur hinsichtlich des Rückgabetyps von 'int
SDL_main(int,char *[])'
1> d:\projekte\sdl-1.2.14\include\SDL_main.h(57): Siehe Deklaration von 'SDL_main'
1>main.cpp(5): error C2371: 'SDL_main': Neudefinition; unterschiedliche Basistypen
1> d:\projekte\sdl-1.2.14\include\SDL_main.h(57): Siehe Deklaration von 'SDL_main'
1> Game.cpp
1>Game.cpp(4): error C2533: 'CGame::{ctor}': Ergebnistyp für Konstruktoren nicht zulässig
1> Code wird generiert...
1>
1>Fehler beim Erstellen
1>
1>Verstrichene Zeit 00:00:00.76
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Leider komme ich an dieser Stelle nicht auf die Lösung des Problems...
Der Qelltext der 2 cpps ist folgender:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Framework.hpp"
#include "Game.hpp"

int main(int argc, char *argv[])
{
    atexit(SDL_Quit);
    if (g_pFramework->Init (800, 720, 16, true) == false)
        return (0);
    CGame Game;
    Game.Init ();

    Game.Run ();
    Game.Quit ();

    g_pFramework->Del ();

    return (0);
}

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "Game.hpp"

CGame::CGame ()
{
    m_pSpriteBackground = NULL;
    m_pSpriteWall = NULL;
    m_pSpriteRoad = NULL;
}

void CGame::Init ()
{
    m_pSpriteBackground = new CSprite;
    m_pSpriteBackground->Load ("picture/field.jpg");

    m_pSpriteWall = new CSprite;
    m_pSpriteWall->Load ("picture/wall.jpg");

    m_pSpriteRoad = new CSprite;
    m_pSpriteRoad->Load ("picture/road.jpg");
    m_pSpriteRoad->SetColorKey (255, 0, 255);

    m_bGameRun = true;
}

void CGame::Quit ()
{
    if (m_pSpriteBackground != NULL)
    {
        delete (m_pSpriteBackground);
        m_pSpriteBackground = NULL;
    }
    if (m_pSpriteWall != NULL)
    {
        delete (m_pSpriteWall);
        m_pSpriteWall = NULL;
    }
    if (m_pSpriteRoad != NULL)
    {
        delete (m_pSpriteRoad);
        m_pSpriteRoad = NULL;
    }
}

void CGame::Run ()
{
    while (m_bGameRun == true)
    {
        ProcessEvents ();

        g_pFramework->Update ();
        g_pFramework->Clear ();

        m_pSpriteBackground->Render ();

        RenderWalls ();
        RenderRoads ();
    }
}

void CGame::ProcessEvents ()
{
    SDL_Event Event;
    if (SDL_PollEvent (&Event))// Gab es ein Even?
    {
        // Ja, also schauen welches:
        switch (Event.type)
        {
        case (SDL_QUIT):
            {
                m_bGameRun = false;
            }break;
            
            case (SDL_KEYDOWN):// Wurde eine Taste gedrückt?
            {
                switch (Event.key.keysym.sym)
                {
                case (SDLK_ESCAPE):
                    {
                        m_bGameRun = false;
                    }break;
                }
            }break;
        }// Ende von switch
    }// Ende von if
}

void CGame::CreateWalls ()
{
    CWall Wall;
    float YPos = 1;
    float XPos = 1;
    Wall.Init (m_pSpriteWall, XPos, YPos);

    m_WallList.push_back (Wall);
}

void CGame::CreateRoads ()
{
    CRoad Road;
    float YPos = 600;
    float XPos = 600;
    Road.Init (m_pSpriteRoad, XPos, YPos);

    m_RoadList.push_back (Road);
}

void CGame::RenderWalls ()
{
    list<CWall>::iterator It;
    for (It = m_WallList.begin (); It != m_WallList.end (); ++It)
    {
        It->Render ();
    }
}

void CGame::RenderRoads ()
{
    list<CRoad>::iterator It;
    for (It = m_RoadList.begin (); It != m_RoadList.end (); ++It)
    {
        It->Render ();
    }
}

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

11.10.2010, 00:57

Du hast nicht zufällig in Game.hpp ein ; vergessen:

C-/C++-Quelltext

1
2
3
4
class CGame
{
  ...
}  // <- hier

Oliver-Ginster

unregistriert

3

11.10.2010, 07:36

So einfach kann doch der Fehler sein..., danke. :whistling:
Das Programm beendet sich zwar jetzt unerwartetter weise von selbst aber das Schaue ich mir nach der Arbeit an....

Oliver-Ginster

unregistriert

4

11.10.2010, 13:05

Nun habe ich wieder ein kleines Problem:
"sdl03.exe": "D:\Projekte\sdl03\Debug\sdl03.exe" geladen, Symbole wurden geladen.
"sdl03.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "D:\Projekte\sdl03\sdl03\SDL.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
"sdl03.exe": "C:\Windows\SysWOW64\advapi32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\msvcrt.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\sechost.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\rpcrt4.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\sspicli.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\cryptbase.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\gdi32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\user32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\lpk.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\usp10.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\winmm.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\msvcp100d.dll" geladen, Symbole wurden geladen.
"sdl03.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
"sdl03.exe": "C:\Windows\SysWOW64\imm32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\msctf.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\uxtheme.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Program Files\Logitech\SetPoint\x86\GameHook.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Program Files\Logitech\SetPoint\x86\lgscroll.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\msvcr80.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\ntmarta.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\Wldap32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\dwmapi.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\KBDUS.DLL" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\KBDUS.DLL" entladen.
"sdl03.exe": "C:\Windows\SysWOW64\KBDGR.DLL" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\KBDGR.DLL" entladen.
"sdl03.exe": "C:\Windows\SysWOW64\ole32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\clbcatq.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\oleaut32.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Program Files (x86)\Common Files\microsoft shared\ink\tiptsf.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\version.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\cryptsp.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\rsaenh.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Windows\SysWOW64\RpcRtRemote.dll" geladen, Cannot find or open the PDB file
"sdl03.exe": "C:\Program Files (x86)\Common Files\microsoft shared\ink\tiptsf.dll" entladen.
Der Thread 'Win32-Thread' (0x111c) hat mit Code -1 (0xffffffff) geendet.
Der Thread 'Win32-Thread' (0x7f0) hat mit Code -1 (0xffffffff) geendet.
Der Thread 'Win32-Thread' (0xca4) hat mit Code -1 (0xffffffff) geendet.
Der Thread 'Win32-Thread' (0x374) hat mit Code -1 (0xffffffff) geendet.
Der Thread 'Win32-Thread' (0xcd0) hat mit Code -1 (0xffffffff) geendet.
Das Programm "[3712] sdl03.exe: Systemeigen" wurde mit Code -1 (0xffffffff) beendet.


Im Einzelschrittmodus schickt der Debugger mich zu der Datei "crtexe.c".
Genauer gesagt zu der Zeile 361:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
{
        /*
        * The /GS security cookie must be initialized before any exception
        * handling targetting the current image is registered.  No function
        * using exception handling can be called in the current image until
        * after __security_init_cookie has been called.
        */
        __security_init_cookie();

        return __tmainCRTStartup();
}

Jetzt habe ich die befürchtung das die Antwort wieder so erschreckend einfach ist...

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

5

11.10.2010, 13:09

Das ist normaler Output - Du hast kein Problem :-)
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

6

11.10.2010, 13:19

Naja, bei "wurde mit Code -1 (0xffffffff) beendet." würde ich schon darauf tippen das irgendetwas nicht ganz so gelaufen ist, wie's soll. Unüblicher Rückgabewert für einen problemlosen Programmablauf.

Find die Stelle, wo der Rückgabewert zurückgegeben wird, dann bist du dem Problem schon sehr nahe.


Gruß
SaRu_

PS: Hier würden natürlich auch eigene Fehlermeldungen sehr helfen: in eine Log-Datei oder von mir aus in die Konsole.

7

11.10.2010, 19:06

Oh man steht:

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
#include "Game.hpp"

CGame::CGame ()
{
    m_pSpriteBackground = NULL;
    m_pSpriteWall = NULL;
    m_pSpriteRoad = NULL;
}

void CGame::Init ()
{
    m_pSpriteBackground = new CSprite;
    m_pSpriteBackground->Load ("picture/field.jpg");

    m_pSpriteWall = new CSprite;
    m_pSpriteWall->Load ("picture/wall.jpg");

    m_pSpriteRoad = new CSprite;
    m_pSpriteRoad->Load ("picture/road.jpg");
    m_pSpriteRoad->SetColorKey (255, 0, 255);

    m_bGameRun = true;
}

void CGame::Quit ()
{
    if (m_pSpriteBackground != NULL)
    {
        delete (m_pSpriteBackground);
        m_pSpriteBackground = NULL;
    }
    if (m_pSpriteWall != NULL)
    {
        delete (m_pSpriteWall);
        m_pSpriteWall = NULL;
    }
    if (m_pSpriteRoad != NULL)
    {
        delete (m_pSpriteRoad);
        m_pSpriteRoad = NULL;
    }
}
so in irgend nem Buch?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
Game::Game ()
    : m_spriteBackground(new Sprite("picture/field.jpg")),
    m_spriteWall(new Sprite("picture/wall.jpg")),
    m_spriteRoad(new Sprite("picture/road.jpg", 255, 0, 255)),
    m_run(true)
{}

Game::~Game ()
{
    delete m_spriteBackground;
    delete m_spriteWall;
    delete m_spriteRoad;
}

(1) Initialisierungsliste
(2) delete funktioniert auch wenn NULL übergeben wird, bzw. es passiert dann nix!
(3) Wofür gibt es Konstruktoren wenn du dann doch ne extra Funktion schreibst?
(4) Wenn du Init nutzen willst guck wenigstens dass du im Default-Konstruktor wenigstens alle Variablen mit nem Wert belegst (m_bGameRun)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CGame::CreateWalls ()
{
    CWall Wall;
    float YPos = 1;
    float XPos = 1;
    Wall.Init (m_pSpriteWall, XPos, YPos);

    m_WallList.push_back (Wall);
}

void CGame::CreateRoads ()
{
    CRoad Road;
    float YPos = 600;
    float XPos = 600;
    Road.Init (m_pSpriteRoad, XPos, YPos);

    m_RoadList.push_back (Road);
}
->

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void Game::createWalls()
{
    m_walls.push_back(Wall(m_pSpriteWall, 1.f, 1.f));
}

void Game::createRoads()
{
    m_roads.push_back(Road(m_pSpriteRoad, 600.f, 600.f));
}

(5) m_RoadList ... das es ne std::list ist, sagt mir auch die IntelliSens, wie wäre es mit m_roads?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CGame::RenderWalls ()
{
    list<CWall>::iterator It;
    for (It = m_WallList.begin (); It != m_WallList.end (); ++It)
    {
        It->Render ();
    }
}

void CGame::RenderRoads ()
{
    list<CRoad>::iterator It;
    for (It = m_RoadList.begin (); It != m_RoadList.end (); ++It)
    {
        It->Render ();
    }
}

->

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void Game::renderWalls() const
{
    std::for_each(m_walls.begin(), m_walls.end(), std::mem_fun_ref(&Wall::render));
}

void Game::renderRoads () const
{
    std::for_each(m_roads.begin(), m_roads.end(), std::mem_fun_ref(&Road::render));
}

Sry für die ganze Kritik aber soll dir nur zeigen wies schneller&einfacher geht. Weiß auch nicht wie weit dein Kenntnisstand ist ;)

Achja du guckst nirgendwo ob das Laden der Bilder erfolgreich war! ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Oliver-Ginster

unregistriert

8

12.10.2010, 13:51

Ich bin jetzt erstmal dem Vorschlag mit der Log Datei gefolgt. Dabei habe ich wohl etwas übertrieben,
denn ich habe jetzt in fast jeder zweiten Zeile eine bemerkung für die Log datei stehen ^^ .
Dabei war mir ein Fehler aufgefallen. Ich wollte Bilder im jpg Format als bmp laden. Das habe ich korrigirt auch wenn ich erst etwas
verwirrt war das IMG_Load im gegensatzt zu BMP_Load keinen string annimt...
Nun bekomme ich das beim Debuggen:

Eine Ausnahme (erste Chance) bei 0x76f52262 in sdl03.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xcdcdcdf1.
Unbehandelte Ausnahme bei 0x76f52262 in sdl03.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0xcdcdcdf1.
Das Programm "[1576] sdl03.exe: Systemeigen" wurde mit Code -1073741819 (0xc0000005) beendet.

Wenn ich das richtig interpretiere habe muss ich jetzt erstmal meine ganzen Zeiger durchschauen.
Sobald mein Programm funktioniert werde ich mich mit deinen (Deviloper) Code verbesserungsvorschlägen befassen.
Aber schonmal zu (2):
Ist es nicht dennoch sinnvoll einen Zeiger nach dem delete auf Null zu setzten, damit ich keine größeren Probleme
bekomme, wenn ich den Zeiger nochmal unbeabsichtigt benutze?

9

12.10.2010, 17:03

Jep. Meist per safe_delete-Template zu lösen. Oder direkt selbstverwaltende Zeiger nutzen ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Oliver-Ginster

unregistriert

10

12.10.2010, 19:43

selbstverwaltende Zeiger?
Meinst du damit sowas wie smarte pointer?

Werbeanzeige