Hallo liebe Community,
Ich habe mir für das SDL-Spiel ein Menü ausgedacht. Ganz einfach, ganz klein. Es hat nur einen Start und einen beende Button. Ich kann den Code aber nicht Kompilieren:
"menue.obj : error LNK2005: "public: __thiscall CMenue::CMenue(void)" (??0CMenue@@QAE@XZ) ist bereits in main.obj definiert.
1>menue.obj : error LNK2005: "public: __thiscall CMenue::~CMenue(void)" (??1CMenue@@QAE@XZ) ist bereits in main.obj definiert.
1>menue.obj : error LNK2005: "public: void __thiscall CMenue::Menue(void)" (?Menue@CMenue@@QAEXXZ) ist bereits in main.obj definiert.
1>menue.obj : error LNK2005: "private: void __thiscall CMenue:
etColored(char * const)" (?SetColored@CMenue@@AAEXQAD@Z) ist bereits in main.obj definiert.
1>menue.obj : error LNK2005: "private: void __thiscall CMenue::Update(class std::basic_string,class std::allocator >)" (?Update@CMenue@@AAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) ist bereits in main.obj definiert.
1>menue.obj : error LNK2005: "private: void __thiscall CMenue::beenden(void)" (?beenden@CMenue@@AAEXXZ) ist bereits in main.obj definiert.
1>menue.obj : error LNK2005: "private: void __thiscall CMenue::start(void)" (?start@CMenue@@AAEXXZ) ist bereits in main.obj definiert.
1>C:\Users\Benni\Documents\Visual Studio 2012\Projects\SDL_Game (bearbeitet)\Debug\SDL_Game (bearbeitet).exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.".
Ich habe nur die "main.cpp" verändert und eine "menue.cpp" reingepackt.
Main.cpp:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
#include "menue.cpp"
int main (int argc, char *argv[])
{
CMenue *Menue;
Menue = new CMenue;
Menue->Menue();
return (0);
}
|
menue.h:
|
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
|
#include
#include "Sprite.hpp"
#include "game.hpp"
#include "Framework.hpp"
class CMenue
{
public:
CMenue();
~CMenue();
void Menue();
private:
CGame Spiel;
CSprite m_Sprite_A;
CSprite m_Sprite_BTN_Start;
CSprite m_Sprite_BTN_Beenden;
CFramework m_Frame;
char *m_BTN[1];
void Update(string Way);
int num;
void SetColored (char BTN[]);
void start();
void beenden();
};
|
menue.cpp:
|
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
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
|
#include "Menue.h"
CMenue::CMenue()
{
m_Sprite_BTN_Start.Load("Button_Start.bmp");
m_Sprite_BTN_Start.SetPos(300, 400);
m_Sprite_BTN_Start.SetColorKey(255, 0, 255);
m_Sprite_BTN_Start.Render();
m_Sprite_BTN_Beenden.Load("Button_Beenden.bmp");
m_Sprite_BTN_Beenden.SetPos(230, 400);
m_Sprite_BTN_Beenden.SetColorKey(255, 0, 255);
m_Sprite_BTN_Beenden.Render();
m_Sprite_A.Load("Arrow.bmp");
m_Sprite_A.SetPos(300, 340);
m_Sprite_A.SetColorKey(255, 0, 255);
m_Sprite_A.Render();
m_Frame.Flip();
num = 0;
m_BTN[0] = "Start";
m_BTN[1] = "Beenden";
}
CMenue::~CMenue()
{
}
void CMenue::Menue(){
// Framework initialisieren
g_pFramework->Init (800, 600, 16, true);
SDL_Event Event;
// Gab es ein Event?
if (SDL_PollEvent (&Event))
{
// Ja, also schauen welches
switch (Event.type)
{
// Wurde eine Taste gedrückt?
case (SDL_KEYDOWN):
{
switch (Event.key.keysym.sym)
{
case (SDLK_DOWN):
{
Update("Down");
}
case (SDLK_UP):
{
Update("Up");
}
case (SDLK_KP_ENTER):
{
Update("Enter");
}break;
}
} break;
}
}
}
void CMenue::Update(string way){
if(num > 2){}
else{
if(way == string("Up"))
{
num--;
int y = 300 + num * 30 ;
int x = 340;
m_Sprite_A.SetPos(x, y);
}
if(way == string("Down")){
num++;
int y = 300 - num * 30 ;
int x = 340;
m_Sprite_A.SetPos(x, y);
}
SetColored(m_BTN[num]);
}
if(way=="Enter"){
if(m_BTN[num] == "Start")
start();
if(m_BTN[num] == "Beenden")
beenden();
}
}
void CMenue::start(){
// Spiel initialisieren
Spiel.Init ();
// Spiel laufen lassen. Diese Funktion läuft so lange,
// bis das Spiel geschlossen oder die Escape-Taste
// gedrückt wird
Spiel.Run ();
}
void CMenue::beenden(){
// Spiel beenden
Spiel.Quit ();
// Framework beenden
g_pFramework->Quit ();
g_pFramework->Del ();
}
void CMenue::SetColored(char BTN[]){
if(BTN == "Start"){
m_Sprite_BTN_Start.Load("Button_Start_A");
m_Sprite_BTN_Start.Render();
}
if(BTN == "Beenden"){
m_Sprite_BTN_Beenden.Load("Button_Beenden_A");
m_Sprite_BTN_Beenden.Render();
}
m_Frame.Flip();
}
|
Ich brauch Hilfe!
Ich hab jetzt schon ziemlich lang überlegt, was den Fehler verursachen könnte, komm aber nicht darauf. Ich habe auch schon die MSDN durchsucht und Google befragt, aber bis jetzt habe ich nichts brauchbares gefuden.