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

28.07.2008, 14:15

Array einer Klasse anlegen - Fehler

Hallo, ich habe, nachdem ich das Buch von David Scherfgen gelesen hatte, erstmal 'nen kleinen Pong Clone geproggt. Das war auch kein großes Problem.
Nun wollte ich als nächstes, kleines, einfaches Projekt "4 Gewinnt" programmieren.

Dabei bekomme ich jedoch eineige Compiler Fehler geliefert, wenn ich versuche ein Array einer Klasse zu erstellen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class CGame;

class CToken
{
public:
    // Variablen

    BOOL        m_bExists;      // Existiert der Token?

    CGame*      m_pGame;        // Zeiger auf die Spielklasse

    tbVector3   m_vPosition;    // Position


    // Methoden

    tbResult    Move(float fTime);      // Bewegen

    tbResult    Render(float fTime);    // Rendern


    // Konstruktor

    inline CToken() {ZeroMemory(this, sizeof(CToken));}

};



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
class CGame
{
public:
    // Variablen

    char        acText[256];
    tbModel*    m_pLevelModel;          // Modell des Levels

    tbModel*    m_pTokenGreenModel;     // Modell des Spielsteins Grün

    tbModel*    m_pTokenRedModel;       // Modell des Spielsteins Rot

    BOOL        m_bPaused;              // Ist das Spiel pausiert?

    BOOL        m_bGameOver;            // Ist das Spiel vorbei?

    int         m_iLevel;               // In welchem Level wir sind

    float       m_fLevelTime;           // Zeit, die für den Level gebraucht wird


    CToken      m_aTokenGreen[21];      // Spielstein grün ---  Hier krieg ich dann nen Fehler, siehe unten.

    CToken      m_aTokenRed[21];        // Spielsteine rot


    int         iToken;

    // Konstruktor

    inline CGame() {ZeroMemory(this, sizeof(CGame));}

    // Methoden

    tbResult    Init();                                                                 // Initialisierung

    tbResult    Exit();                                                                 // Herunterfahren

    tbResult    Load();                                                                 // Laden

    tbResult    Unload();                                                               // Entladen

    tbResult    Move(float fTime);                                                      // Bewegen

    tbResult    Render(float fTime);                                                    // Rendern

    tbResult    InitLevel(int iLevel);                                                  // Initialisiert einen Level

    int         CreateToken(tbVector3 vPosition, int player);                           // Erstellt einen Spielstein

};



Ich versuche also ein Array der CToken Klasse in CGame zu erstellen.

Die Fehler unter anderem sind:

\game.h(15) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'm_aTokenGreen'
\game.h(15) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.


Kann mir jemand sagen wie das zustande kommt? In meiner Hauptspielklasse habe ich natürlich alle header eingebunden.

2

28.07.2008, 14:29

Hast du in der Hauptspielklasse die Datei mit den "CToken"s auch vor der Datei mit der "Game"-Klasse eingebunden?
Ich glaub das gab bei mir auch mal so einen Fehler.

Passiert das eigentlich nur wenn das ein Array ist?

3

28.07.2008, 14:32

Oh man, daran lags echt. Ich danke dir!

4

28.07.2008, 14:46

Dann ist ja gut :)

C-/C++-Quelltext

1
tbResult    InitLevel(int iLevel);                                                    // Initialisiert einen Level 


Wieso übergibst du der Funktion ein "Level" als Parameter? Bei mir sieht jedes 4 gewinnt Spielfeld am Anfang gleich aus :D

5

28.07.2008, 14:46

Nö passiert in dem Fall immer. Benutz bitte bool, BOOL ist ein C relikt. Guck dir const an. GUck dir Referenzen an. Und was das nette Wörtchen unsigned anstellst.
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

6

28.07.2008, 14:49

Ich bevorzuge eigentlich auch "bool", aber manche Funktionen von DirectX nehmen nur "BOOL" an, oder? Gibts da ne Möglichkeit, das zu umgehen, dass ich das normale "bool" verwenden kann?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

28.07.2008, 14:51

Zitat von »"defaultplayer^^

Ich bevorzuge eigentlich auch "bool", aber manche Funktionen von DirectX nehmen nur "BOOL" an, oder? Gibts da ne Möglichkeit, das zu umgehen, dass ich das normale "bool" verwenden kann?


?! - Du kannst da ja einfach ein bool übergeben. Und falls das nicht geht (was ich mir nur schwer vorstellen kann), dann caste das hald explizit nach BOOL, wenns sein muss.

8

28.07.2008, 14:51

Zitat von »"defaultplayer^^

Dann ist ja gut :)

C-/C++-Quelltext

1
tbResult    InitLevel(int iLevel);                                                    // Initialisiert einen Level 


Wieso übergibst du der Funktion ein "Level" als Parameter? Bei mir sieht jedes 4 gewinnt Spielfeld am Anfang gleich aus :D


Ich habe mir als Grundgerüst das Buchbeispiel Breakanoid von David S. genommen. Also, du hast natürlich recht. Das ist unnötig und werde ich noch beseitigen. Aus den gleichen Grund benutze ich auch BOOL. Es war halt in dem Beispiel so vorgeben.

9

28.07.2008, 15:01

Gewisse Dinge wuerde ich in C++ nicht machen, das hier ist eins davon:

Quellcode

1
2
    // Konstruktor
    inline CToken() {ZeroMemory(this, sizeof(CToken));}

10

28.07.2008, 15:08

Nja die Variablen public zu machen ... würd ich auch nciht machen. Und wenn dann ne struct nutzen, da ist direkt alles public wenn du es nicht extra angibst. Und wenn de es ordentlich machen willst nimmste class mit privat variablen und anständigen getter/setter. Dann läufts creamig :)
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

Werbeanzeige