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

1

01.06.2011, 13:34

Struct in Klasse

Hallo, ich habe eine Frage ^^

Ich verstehe nicht, wieso ich ein struct nicht vorwärtsdeklarieren kann?
Wo besteht bitte der unterschied zwischen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct STree;

class CMap
{
private:
    STree m_struct_TreeAni;
};

struct STree
{
    STree() : fFrame_Tree(0.0f), fTimer_Tree(0.0f), bTreeSide(false) {};
    
    float fFrame_Tree;
    float fTimer_Tree; 
    bool bTreeSide;
};


und

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct STree
{
    STree() : fFrame_Tree(0.0f), fTimer_Tree(0.0f), bTreeSide(false) {};
    
    float fFrame_Tree;
    float fTimer_Tree; 
    bool bTreeSide;
};

class CMap
{
private:
    STree m_struct_TreeAni;
};


beim ersten fall bekomme ich nähmlich den error, dass m_struct_TreeAni ein undefiniertes struct verwendet?

Liebe Grüße,
Ombalat

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.06.2011, 13:37

Ähm, der Unterschied ist dass im ersten Fall das struct nicht definiert ist und im zweiten schon. Wenn du einen Klassenmember definieren willst muss dessen Typ definiert sein ansonsten kann der Compiler nicht entscheiden wie das Layout deiner Klasse genau aussehen soll.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

3

01.06.2011, 14:02

Dem Compiler gehts Hauptsächlich um die Größe von STree.
Ist STree 16 Byte groß und Member von CMap, wird CMap 16 Byte größer. Die größe ist aber erst nach der Definition bekannt.
Die Deklaration von Strukturen und Klassen ist dafür gut, dass du Zeiger und Referenzen auf das Objekt verwenden kannst. Die sind in jedem Fall gleich groß.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct STree;

class CMap
{
private:
    STree *m_struct_TreeAni;
};

struct STree
{
    STree() : fFrame_Tree(0.0f), fTimer_Tree(0.0f), bTreeSide(false) {};
    
    float fFrame_Tree;
    float fTimer_Tree; 
    bool bTreeSide;
};


Das würde also Funktionieren.
"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?

4

01.06.2011, 14:25

Danke für die erklärung, NachoMan =)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

01.06.2011, 17:53

Insgesamt aber trotzdem ein Manko des Compilers, welches zu Beheben heutzutage eigentlich kein Problem mehr sein sollte. Na ja ;)
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]

6

01.06.2011, 18:45

War das jz auf mich oder auch die compiler - hersteller bezogen ^^

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

01.06.2011, 19:38

Weder noch. Es war ein Seitenhieb auf die Definition der Sprache und wie sie zu verarbeiten ist. Nicht allzu ernst nehmen ;)
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]

8

01.06.2011, 19:56

Oke passt ^^ sonst hätt mich interessiert wie das gegangen wärt :P

Werbeanzeige