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

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

15.05.2013, 17:34

[C++ & SDL] Seltsame Syntax Fehler

Ich hab mir n paar Klassen für Sprites, Sound, Text etc. erstellt die mir einige Schreibarbeit abnehmen sollen.
Diese hab ich in meinen Quellcode implementiert und nun einige seltsame Syntaxfehler bekommen.

Fehler:

Quellcode

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
1>------ Erstellen gestartet: Projekt: SDL_Game 3, Konfiguration: Debug Win32 ------
1>  StartGame.cpp
1>  Sprite.cpp
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(48): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Background'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(48): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(48): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(49): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Player'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(49): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(49): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(50): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerLeft'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(50): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(50): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(51): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerRight'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(51): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(51): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(52): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerDown'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(52): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(52): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(53): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerDR'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(53): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(53): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(54): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerUL'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(54): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(54): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(55): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerUR'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(55): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(55): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(56): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PlayerDL'
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(56): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\admin\documents\visual studio 2010\projects\sdl_game 3\sdl_game 3\startgame.hpp(56): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>  Game.cpp
1>  Code wird generiert...
1>  Überspringen... (keine relevanten Änderungen gefunden)
1>  main.cpp
1>  Text.cpp
1>  Music.cpp
1>  MainMenu.cpp
1>  Framework.cpp
1>  Credits.cpp
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Relevanter Quellcode (auf nachfrage kann ich noch mehr Code hochladen):

StartGame.hpp:

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

#include <SDL.h>
#include <SDL_image.h>
#include "Framework.hpp"
#include "Sprite.hpp"
#include "Music.hpp"
#include "Sound.hpp"
#include "Text.hpp"

class CStartGame 
{
public:

    // Komstruktor
    CStartGame ();

    // Memberfunktionen
    void Game ();
    void CheckState ();


        // Membervariablen
        bool m_bPlayer;
        bool m_bPlayerLeft;
        bool m_bPlayerRight;
        bool m_bPlayerDown;
        bool m_bPlayerDR;
        bool m_bPlayerUL;
        bool m_bPlayerUR;
        bool m_bPlayerDL;

        

        bool m_bPlayerDRStop;
        bool m_bPlayerULStop;
        bool m_bPlayerURStop;
        bool m_bPlayerDLStop;
        

        bool m_bDebug1;

        
        SDL_Color textColor;

        // Bilder für SDL_image
        CSprite Background;
        CSprite Player;
        CSprite PlayerLeft;
        CSprite PlayerRight;
        CSprite PlayerDown;
        CSprite PlayerDR;
        CSprite PlayerUL;
        CSprite PlayerUR;
        CSprite PlayerDL;
        
        CText Text;
        CText Text2;
        CText Text3;
        CText Text4;
        CText Text5;
        CText Text6;
        CText Text7;
        CText Text8;
        CText Text9;
        CText Text10;
        CText Number;

        char* chText3;
        char* chText4;
        char* chText5;
        char* chText6;
        char* chText7;
        char* chText8;
        char* chText9;
        char* chText10;

};
#endif


StartGame.cpp:

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
#include "StartGame.hpp"
#include <iostream>
using namespace std;


CStartGame::CStartGame ()
:Background("Data/Images/Background.bmp", 0, 0), Player("Data/Images/Player.bmp", 100, 100), PlayerLeft("Data/Images/PlayerLeft.bmp", 100, 100), PlayerRight("Data/Images/PlayerRight.bmp", 100, 100), PlayerDown("Data/Images/PlayerDown.bmp", 100, 100), PlayerDR("Data/Images/PlayerDR.bmp", 100, 100), PlayerUL("Data/Images/PlayerUL.bmp", 100, 100), PlayerUR("Data/Images/PlayerUR.bmp", 100, 100), PlayerDL("Data/Images/PlayerDL.bmp", 100, 100),
Number(22, 300, 300, true, 50, 0, 0, 0), Text(Player.SpritePosition.x, 50, 50, true, 50, 0, 0, 0), Text2(Player.SpritePosition.y, 200, 50, true, 50, 0, 0, 0), 
Text3(chText3, 500, 50, false, 50, 0, 0, 0), Text4(chText4, 800, 50, false, 50, 0, 0, 0), Text5(chText5, 500, 100, false, 50, 0, 0, 0), Text6(chText6, 800, 100, false, 50, 0, 0, 0),
Text7(chText7,500, 150, false, 50, 0, 0, 0), Text8(chText8, 800, 150, false, 50, 0, 0, 0), Text9(chText9, 500, 200, false, 50, 0, 0, 0), Text10(chText10, 800, 200, false, 50, 0, 0, 0)
{  
   m_bPlayer = true;
   m_bPlayerLeft = false;
   m_bPlayerRight = false;
   m_bPlayerDown = false;
   m_bPlayerDR = false;
   m_bPlayerUL = false;
   m_bPlayerUR = false;
   m_bPlayerDL = false;
   m_bDebug1 = false;

   m_bPlayerDRStop = false;
   m_bPlayerULStop = false;
   m_bPlayerURStop = false;
   m_bPlayerDLStop = false;
}

void CStartGame::Game ()
{

        
        // Sprites rendern

        // Hintergrund rendern
        Background.Render ();

        // Spieler rendern
        if( m_bPlayer == true )
            Player.Render ();
        else if( m_bPlayerLeft == true )
            PlayerLeft.Render ();
        else if( m_bPlayerRight == true )
            PlayerRight.Render ();
        else if( m_bPlayerDown == true )
            PlayerDown.Render ();
        else if( m_bPlayerDR == true || m_bPlayerDRStop == true )
            PlayerDR.Render ();
        else if ( m_bPlayerUL == true || m_bPlayerULStop == true )
            PlayerUL.Render ();
        else if ( m_bPlayerUR == true || m_bPlayerURStop == true )
            PlayerUR.Render ();
        else if ( m_bPlayerDL == true || m_bPlayerDLStop == true )
            PlayerDL.Render ();
        
        if ( m_bDebug1 == true )
        {
            CheckState ();

        Number.RenderNumber ();
        Text.RenderNumber ();
        Text2.RenderNumber ();
        Text3.Render ();
        Text4.Render ();
        Text5.Render ();
        Text6.Render ();
        Text7.Render ();
        Text8.Render ();
        Text9.Render ();
        Text10.Render ();
        }

}

void CStartGame::CheckState ()
{}


Sprite.hpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef SPRITE_HPP
#define SPRITE_HPP

#include "Framework.hpp"

class CSprite
{
public:

    CSprite (const char*, int, int);

    int Render ();

    SDL_Rect SpritePosition;

    SDL_Surface* Sprite;
    

};
#endif


Sprite.cpp:

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

CSprite::CSprite (const char* file, int XPos, int YPos)
{
    Sprite = IMG_Load(file);
    if(!Sprite)
    {
    // Fehler!
    cout << "Konnte Bild nicht laden! Fehler: " << IMG_GetError() << endl;
    g_pFramework->Quit ();
    }

    SpritePosition.x = XPos;
    SpritePosition.y = YPos;

}


int CSprite::Render ()
{
    // Colorkey einstellen
    SDL_SetColorKey (Sprite, SDL_SRCCOLORKEY,
    SDL_MapRGB (Sprite->format, 255, 0, 255) );

    SDL_BlitSurface( Sprite, 0, g_pFramework->GetScreen(), &SpritePosition);

    return 0;
}


Ich danke schon mal im vor raus für das durchlesen des nicht gerade kleinen Quellcodes. :)

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

MGBeginner

Frischling

Beiträge: 81

Wohnort: Limburg

  • Private Nachricht senden

2

15.05.2013, 18:52

Könntest du eventuell noch die Framework.hpp posten ?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

15.05.2013, 19:30

Der Fehler C2146 heißt, er kennt den Bezeichner nicht. Also hast du wohl die zugehörigen Klasse für Background, Player etc. nicht includiert.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

4

15.05.2013, 20:05

Das seltsame ist
1. Das ich alle benötigten Dateien includiert sind und
2. Das wenn ich über eines der Elemente die er "anscheinend" nicht kennt mit der Maus gehe er mir vollkommen richtig anzeigt das die Variable zum Beispiel: von der Klasse CPlayer ist in CStartGame definiert wurde und Player heißt.

?(

Framework.hpp:

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

#include <iostream>
#include <Windows.h>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <SDL_mixer.h>
#include "Singleton.hpp"
#include "Timer.hpp"
#include "StartGame.hpp"

using namespace std;

#define g_pFramework CFramework::Get()

class CFramework : public TSingleton<CFramework>
{
    public:

        bool  Init    (int ScreenWidth, int ScreenHeight,

            int ColorDepth, bool bFullscreen);
        int InitIcon ();
        void  Quit    ();
        void  Update  ();
        void  Clear   ();
        void  Flip    ();
        bool  KeyDown (int Key_ID);
        SDL_Surface *GetScreen () {return m_pScreen;}
        SDL_Surface *m_pScreen;   // Surface für den Screen


    private:
        Uint8       *m_pKeystate; // Array für aktuellen Tastaturstatus

};

#endif


Framework.cpp:

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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
// FRAMEWORK_CPP
#include "Framework.hpp"


// Init
//
// Aufgabe: Framework initialisieren
//
bool CFramework::Init (int ScreenWidth, int ScreenHeight,
                       int ColorDepth, bool bFullscreen)
{

    // Alle Systeme der SDL initialisieren
    if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1 )
    {
        cout << "SDL konnte nicht initialisiert werden!" << endl;
        cout << "Fehlermeldung: " << SDL_GetError () << endl;

        Quit ();

        return (false);
    }

    // SDL mit dem Grafik- und Audiosystem initialisieren.
    if(SDL_Init(SDL_INIT_AUDIO) == -1)
    {
    // Ups, das hat nicht funktioniert!
    // Wir geben die Fehlermeldung aus.
    cout << "Konnte SDL_mixer nicht initialisieren! Fehler: " << SDL_GetError() << endl;
    return (false);
    }
    // SDL mit dem Grafiksystem initialisieren.
    if(SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        cout << "SDL konnte nicht initialisiert werden!" << endl;
        cout << "Fehlermeldung: " << SDL_GetError () << endl;

        Quit ();

        return (false);
    }
    // SDL_ttf initialisieren.
    if(TTF_Init() == -1)
    {
    cout << "Konnte SDL_ttf nicht initialisieren! Fehler: " << TTF_GetError() << endl;
    return (false);
    }
    // Vollbild oder Fenstermodus einstellen
    if (bFullscreen == true)
    {
        m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
            SDL_HWSURFACE | SDL_DOUBLEBUF |
            SDL_FULLSCREEN);
    }
    else
    {
        m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
            SDL_HWSURFACE | SDL_DOUBLEBUF);
    }

    // Prüfen, ob alles funktioniert hat
    if (m_pScreen == NULL)
    {
        cout << "Videomodus konnte nicht gesetzt werden!" << endl;
        cout << "Fehlermeldung: " << SDL_GetError () << endl;

        Quit ();

        return (false);
    }

    InitIcon ();

        // SDL_mixer
        const int samplingFrequency = 44100;    // 44100 Hz Abtastfrequenz
        Uint16 audioFormat = AUDIO_S16SYS;      // 16 Bits pro Sample
        const int numChannels = 2;              // 2 Kanäle = Stereo
        const int chunkSize = 4096;             // ein guter Wert ...


    if(Mix_OpenAudio(samplingFrequency, audioFormat, numChannels, chunkSize) == -1)
    {
    cout << "Konnte SDL_mixer nicht starten! Fehler: " << Mix_GetError() << endl;
    return (false);
    }

    // Nun setzen wir noch den Titel des Fensters.
   SDL_WM_SetCaption("SDL_Game 3.21 PreRelease", "SDL_Game 3.21 PreRelease");

    // Zeiger auf internes Array für Tastaturstatus ermitteln
    m_pKeystate = SDL_GetKeyState (NULL);

    // Alles ging glatt, also true zurückliefern
    return (true);

} // Init

// Quit
//
// Aufgabe: Framework (SDL) beenden
//
void CFramework::Quit ()
{
    

    // SDL beenden
    SDL_Quit ();

} // Quit

// Update
//
// Aufgabe: Timer und Keyboardstatus updaten
//
void CFramework::Update ()
{
    // Timer updaten
    g_pTimer->Update ();

    // Tastaturstatus ermitteln
    SDL_PumpEvents ();

} // Update

// Keydown
//
// Aufgabe: Tastendruck abfragen
//
bool CFramework::KeyDown (int Key_ID)
{
    // Prüfen, ob Taste gedrückt ist
    return (m_pKeystate[Key_ID] ? true : false);

} // KeyDown

// Clear
//
// Aufgabe: Buffer löschen
//
void CFramework::Clear ()
{
    // Buffer (Surface) mit Hintergrundfarbe füllen
    SDL_FillRect (m_pScreen, NULL,
        SDL_MapRGB (m_pScreen->format, 0, 0, 0));

} // Clear

// Flip
//
// Aufgabe: Surface umschalten (flippen)
//
void CFramework::Flip ()
{
    // Surface umschalten
    SDL_Flip (m_pScreen);

} // Flip

// InitIcon
//
// Aufgabe: Icon intialisieren
//
int CFramework::InitIcon ()
{
    SDL_Surface     *icon;

icon = SDL_LoadBMP("Data/Images/icon.bmp");
if(!icon)
{
// Fehler!
cout << "Konnte Icon nicht laden! Fehler: " << IMG_GetError() << endl;
return(false);
}
  

SDL_WM_SetIcon(icon,NULL);


return 0;
}

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

MGBeginner

Frischling

Beiträge: 81

Wohnort: Limburg

  • Private Nachricht senden

5

15.05.2013, 20:14

Wieso wird in der Framework.hpp StartGame.hpp inkludiert ? Da liegt denke ich das Problem, nimm das mal raus ! oder brauchst du die irgendwo in der Framework.hpp oder der Framework.cpp (habe mir den restlichen Code nicht genau angeschaut)

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

6

15.05.2013, 20:28

Danke der Fehler wär beseitigt! :thumbsup:
(Ich weiß nicht mal wieso da das steht kann mich gar nicht erinnern das je geschrieben zu haben is ja auch egal)

Aber wieso erkannte der Kompiler die ganzen Variablen nicht?
Und noch was jetzt hab ich n weiteren Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1>------ Erstellen gestartet: Projekt: SDL_Game 3, Konfiguration: Debug Win32 ------
1>  Sprite.cpp
1>  Code wird generiert...
1>  Kompilieren...
1>  main.cpp
1>  Text.cpp
1>  StartGame.cpp
1>  Music.cpp
1>  MainMenu.cpp
1>  Game.cpp
1>  Framework.cpp
1>  Credits.cpp
1>  Code wird generiert...
1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: Standardbibliothek "msvcrt.lib" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CSound::CSound(char const *)" (??0CSound@@QAE@PBD@Z)" in Funktion ""public: __thiscall CGame::CGame(void)" (??0CGame@@QAE@XZ)".
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CSound::PlaySoundW(int)" (?PlaySoundW@CSound@@QAEXH@Z)" in Funktion ""private: void __thiscall CGame::ProcessEvents(void)" (?ProcessEvents@CGame@@AAEXXZ)".
1>d:\admin\documents\visual studio 2010\Projects\SDL_Game 3\Debug\SDL_Game 3.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Sound.hpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef SOUND_HPP
#define SOUND_HPP

#include "Framework.hpp"

class CSound
{
public:

    CSound (const char*);

    void PlaySound (int);

private:

    Mix_Chunk* Sound;
};

#endif


Sound.cpp:

C-/C++-Quelltext

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

CSound::CSound (const char* file)
{
    // Sounds
    Mix_Volume( -1, 15 );

    Sound = Mix_LoadWAV(file);
    if(!Sound)
    {
    // Fehler!
    cout << "Konnte WAV-Datei nicht laden! Fehler: " << Mix_GetError() << endl;
    g_pFramework->Quit ();
    }
}

void CSound::PlaySound (int loops)
{
    Mix_PlayChannel( -1, Sound, loops);
}

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

MGBeginner

Frischling

Beiträge: 81

Wohnort: Limburg

  • Private Nachricht senden

7

15.05.2013, 21:06

Das Problem war nicht, dass du vergessen hast, etwas zu inkludieren, sondern dass sprite.hpp 2x inkludiert wurde:
- sprite.cpp inkludiert sprite.hpp
- in der sprite.hpp wird SPRITE_HPP definiert !!!! (Wichtig !)
- nun folgt das Inkludieren der framework.hpp (zu diesem Zeitpunkt ist die Klasse CSprite noch nicht bekannt, kommt ja erst nach dem include)
- über die framework.hpp -> StartGame.hpp wird die sprite.hpp nun ein zweites mal inkludiert. Da SPRITE_HPP beim ersten Mal schon definiert wurde, wird die sprite.hpp nicht nochmal ausgewertet (siehe Punkt 2). Zu diesem Zeitpunkt ist die Klasse CSprite immer noch nicht bekannt, diese wird aber nun in der StartGame.hpp benötigt (Zeile 48 und folgende), so dass es zum Fehler kommt ! Der Compiler kennt eben CSprite zu diesem Zeitpunkt noch gar nicht !

(hoffe das ist so richtig erklärt, bitte evtl. korrigieren)

Zum weiteren Problem bin ich mir nicht sicher, sieht so aus, als würde er die Sound.cpp gar nicht compiliern ?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

15.05.2013, 21:35

Quellcode

1
2
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CSound::CSound(char const *)" (??0CSound@@QAE@PBD@Z)" in Funktion ""public: __thiscall CGame::CGame(void)" (??0CGame@@QAE@XZ)".
1>Game.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CSound::PlaySoundW(int)" (?PlaySoundW@CSound@@QAEXH@Z)" in Funktion ""private: void __thiscall CGame::ProcessEvents(void)" (?ProcessEvents@CGame@@AAEXXZ)".


Da steht es doch ganz klar:
CSound::PlaySound(int) ist nirgends definiert, allerdings ist es deklariert und wird verwendet. Dasselbe gilt für CSound::CSound(char const *). Da wird wohl offenbar eine Datei nicht mit kompiliert in Deinem Projekt.
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (15.05.2013, 21:40)


Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

9

15.05.2013, 22:00

Ich hab was in den Includes geändert.
Jetzt wird es debuggt doch wenn in StartGame.cpp Text3 initialisiert wird gibt es einen Fehler.
In Text.cpp in Z. 36 liegt der Fehler doch trotz intensivem debuggen find ich den nicht.

Text.hpp:

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

class CText
{
public:

    CText (const char* text, int XPos, int YPos, bool m_bFreeSans, int size, int R, int G, int B);
    CText (int Number, int XPos, int YPos, bool m_bFreeSans, int size, int R, int G, int B);

    void Render ();
    void RenderNumber ();

    SDL_Rect TextPosition;

    int Number2;

private:

    SDL_Surface* Text;  
    TTF_Font* FreeSans;
    TTF_Font* Arial;

    const char* text2;
    int XPos2;
    int YPos2;
    bool m_bFreeSans2;
    int size2;
    SDL_Color textColor2;
    bool m_bNumber;
};

#endif


Text.cpp:

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

// Konstruktor für Textwerte
CText::CText (const char* text, int XPos, int YPos, bool m_bFreeSans, int size, int R, int G, int B)
{

if( m_bFreeSans == true )
{
FreeSans = TTF_OpenFont("Data/TTF/FreeSans.ttf", size);
if(!FreeSans)
{
// Fehler!
cout << "Konnte Schriftart nicht laden! Fehler: " << TTF_GetError() << endl;
g_pFramework->Quit ();
}
}
else if( m_bFreeSans == false )
{
Arial = TTF_OpenFont("Data/TTF/arial.ttf", size);
if(!Arial)
{
// Fehler!
cout << "Konnte Schriftart nicht laden! Fehler: " << TTF_GetError() << endl;
g_pFramework->Quit ();
}
}

SDL_Color textColor = {R, G, B};

XPos = TextPosition.x;
YPos = TextPosition.y;

if( m_bFreeSans == true )
Text = TTF_RenderText_Blended( FreeSans, text, textColor);
else if( m_bFreeSans == false)
Text = TTF_RenderText_Blended( Arial, text, textColor);

text = text2;
XPos = XPos2;
YPos = YPos2;
m_bFreeSans = m_bFreeSans2;
size = size2;
m_bNumber = false;
}

// Konstruktor für Nummerwerte
CText::CText (int Number,int XPos, int YPos, bool m_bFreeSans, int size, int R, int G, int B)
{
  if( m_bFreeSans == true )
{
FreeSans = TTF_OpenFont("Data/TTF/FreeSans.ttf", size);
if(!FreeSans)
{
// Fehler!
cout << "Konnte Schriftart nicht laden! Fehler: " << TTF_GetError() << endl;
g_pFramework->Quit ();
}
}
else if( m_bFreeSans == false )
{
Arial = TTF_OpenFont("Data/TTF/arial.ttf", size);
if(!Arial)
{
// Fehler!
cout << "Konnte Schriftart nicht laden! Fehler: " << TTF_GetError() << endl;
g_pFramework->Quit ();
}
}

  SDL_Color textColor = {R, G, B};

XPos = TextPosition.x;
YPos = TextPosition.y;

if( m_bFreeSans == true )
    Text = TTF_RenderText_Blended( FreeSans, to_string(Number).c_str(), textColor);
else if( m_bFreeSans == false)
    Text = TTF_RenderText_Blended( Arial, to_string(Number).c_str(), textColor);

Number = Number2;
XPos = XPos2;
YPos = YPos2;
m_bFreeSans = m_bFreeSans2;
size = size2;
textColor = textColor2;
m_bNumber = true;
}

void CText::Render ()
{
    SDL_BlitSurface( Text, 0, g_pFramework->GetScreen(), &TextPosition);
}
void CText::RenderNumber ()
{
    

    if( m_bNumber == true && m_bFreeSans2 == true )
        Text = TTF_RenderText_Blended( FreeSans, to_string(Number2).c_str(), textColor2);
    if( m_bNumber == true && m_bFreeSans2 == false )
        Text = TTF_RenderText_Blended( Arial, to_string(Number2).c_str(), textColor2);
    if( m_bNumber == false && m_bFreeSans2 == true )
        Text = TTF_RenderText_Blended( FreeSans, text2, textColor2);
    if( m_bNumber == false && m_bFreeSans2 == false )
        Text = TTF_RenderText_Blended( Arial, text2, textColor2);

    SDL_BlitSurface( Text, 0, g_pFramework->GetScreen (), &TextPosition); 
}

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

MGBeginner

Frischling

Beiträge: 81

Wohnort: Limburg

  • Private Nachricht senden

10

15.05.2013, 22:16

Was kommt denn genau für ein Fehler ?

Die Zuweisungen text = text2 etc., müssten die nicht genau anders herum lauten text2 = text usw. ?

Werbeanzeige