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

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

1

24.02.2011, 20:29

error C2079: 'cGame::Player' verwendet undefiniertes class 'CPlayer'

Hallo,
ich habe ein mir unerklärliches Problem, und zwar:
ich füge der Klasse "cGame" eine Instanz der Klasse "CPlayer" hinzu(Zeile 29). Alles logisch und so.
Doch der Kompiler meckert mal wieder (meiner Meinung nach total unberechtigt): undefiniert! Ôo

C-/C++-Quelltext

1
Fehler  1   error C2079: 'cGame::Player' verwendet undefiniertes class 'CPlayer'    d:\programdata\visual studio 2008\projects\minecraft\minecraft\src\game.hpp 29



hier die Game.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
#ifndef GAME_HPP
#define GAME_HPP

#include "Player.hpp"//Hier include ich die datei, also müsste 'CPlayer' definiert sein...
#include "Singleton.hpp"
#include "Framework.hpp"
#include "block.hpp"
#include "Vektor.hpp"
#include "Timer.hpp"

#define MAX_BLOCKS 10
#define BLOCKSIZE 32





#define g_pGame cGame::Get()

class cGame : public TSingleton<cGame>
{
public:
    cGame() {}

    void Init();
    void Run();
    void Quit() {}
    void display();
    CPlayer Player;  //Hier die Instanz von 'CPlayer'

private:
    void ProcessEvents();

    void SetPos();

    CVektor m_Position;
    CVektor m_ViewAngle;
    bool m_bRunning;
    SBlock World[MAX_BLOCKS][MAX_BLOCKS][MAX_BLOCKS];
};





#endif


und hier die Player.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
#ifndef PLAYER_HPP
#define PLAYER_HPP


#include "Timer.hpp"
#include "Vektor.hpp"
#include "Singleton.hpp"
#include "Framework.hpp"
#include <math.h>

#define WALK_SPEED 2.5
#define MOUSE_SENSITIVITY 1


class CPlayer
{
public:

    void Init();
//  void Reset();
    void Update();

    CVektor GetPos()        {   return(m_Position);     }
    CVektor GetViewAngle()  {   return(m_ViewTarget);   }
    CVektor GetViewUp()     {   return(m_ViewUp);       }

    

private:

    void ProcessMoving();
    void Rotate_View(float speed);
    void SetPos(CVektor Pos);
    void SetViewTarget(CVektor Target);
    void SetViewUp(CVektor Up);
    void Move(CVektor Move);
    void Mouse();

    CVektor m_Position;
    CVektor m_ViewTarget;
    CVektor m_ViewUp;
    CVektor m_Moving;

};









#endif



MfG,
RmbRT
"Dumm ist, wer dummes tut."

2

24.02.2011, 20:50

Hallo RmbRT,

probier mal ein

C-/C++-Quelltext

1
class CPlayer;


vor der Klassendefinition von cGame.

Gruß
SaRu_

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

3

24.02.2011, 20:53

Ne, geht (leider und unverständlicher Weise) nicht...
MfG,
RmbRT
"Dumm ist, wer dummes tut."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

24.02.2011, 20:56

Inkludiert Player.hpp irgendwie indirekt Game.hpp? Das würd nämlich alles erklären ;)

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

5

24.02.2011, 20:58

Ja, was ist damit? Muss ich das beheben? ich hab ja "#ifndef..." usw. benutzt eig., oder muss ich das trotzdem beheben?
"Dumm ist, wer dummes tut."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

24.02.2011, 20:59

Natürlich musst du das beheben. Include Guards schützen gegen Mehrfachdefinitionen aber sie sind kein Freibrief um einfach alles überall zu inkludieren oder gar zirkuläre includes aufzulösen. In dem Fall sind sie sogar schuld dran dass keine bessere Fehlermeldung kommt. Kannst dir ja mal durchdenken was genau da passiert ;)

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

7

24.02.2011, 21:09

[Edit: Gelöst]Include behoben - Neues Problem...

Danke, für den Tipp mit dem Include.
Ich habe nun aber schon ein neues Problem, und zwar:

Quellcode

1
2
3
4
5
6
7
Fehler  2   error LNK2005: "public: void __thiscall CTimer::init(void)" (?init@CTimer@@QAEXXZ) ist bereits in game.obj definiert.   main.obj
Fehler  3   error LNK2005: "public: float __thiscall CTimer::GetTicks(void)" (?GetTicks@CTimer@@QAEMXZ) ist bereits in game.obj definiert.  main.obj
Fehler  4   error LNK2005: "public: void __thiscall CVektor::Set(float,float,float)" (?Set@CVektor@@QAEXMMM@Z) ist bereits in game.obj definiert.   main.obj
Fehler  5   error LNK2005: "public: void __thiscall CTimer::init(void)" (?init@CTimer@@QAEXXZ) ist bereits in game.obj definiert.   Player.obj
Fehler  6   error LNK2005: "public: float __thiscall CTimer::GetTicks(void)" (?GetTicks@CTimer@@QAEMXZ) ist bereits in game.obj definiert.  Player.obj
Fehler  7   error LNK2005: "public: void __thiscall CVektor::Set(float,float,float)" (?Set@CVektor@@QAEXMMM@Z) ist bereits in game.obj definiert.   Player.obj
Fehler  8   fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.   D:\ProgramData\Visual Studio 2008\Projects\Minecraft\Minecraft\Debug\Minecraft.exe


Weis jemand weiter?

Edit: Ich hatte die definitionen von funktionen der Klassen "CVektor" und "CTimer" innerhalb der .hpp gemacht, also:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class CTimer
{
...
};

CTimer::GetTicks
{
...
}


Jetzt weis ich, dass ich die definition außerhalb der klasse auch in eine .cpp schreiben muss :D

MfG,
RmbRT
"Dumm ist, wer dummes tut."

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »RmbRT« (24.02.2011, 21:17)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

24.02.2011, 21:10

Die Definitionen von den dort aufgelisteten Methoden stehen offenbar in einem Header der in mehreren .cpp Files inkludiert wird...

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

9

24.02.2011, 21:18

Genau.
Danke für die schnelle hilfe^^

MfG,
RmbRT
"Dumm ist, wer dummes tut."

Werbeanzeige