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

physX

Treue Seele

  • »physX« ist der Autor dieses Themas

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

1

22.09.2009, 10:44

fehler: macro names must be identifiers

Hallo, ich bekomme aktuell immer die oben beschriebene fehlermeldung, verstehen aber nicht weshalb und wie ich das beheben kann.

ich verwende nur standartanweisungen der Form

Quellcode

1
2
3
4
5
#ifndef BLA_BLA
#define BLA_BLA
#define BLUBB cout<<"ein text"<<endl;
...
#endif

im i-net gibt es zwar auch hinweise auf diesen fehlercode aber dort liegt es in der Regel daran, dass numerische Zeichen verwendet wurden, was ja hier nicht der Fall ist. Vielleicht weiss hier jemand Rat.
danke
gruss


hier mal die code-fragmente aus dem kleinen prog

main:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "CFrame.hpp"
#include "CGame.hpp"

int main(int argc,char *argv())
{
    g_pFrame->Init(640,480,32,false);
    CGame Game;
    Game.Init();
    Game.Run();
    Game.Quit();
    g_pFrame->Quit();
    return 1;
}


CFrame.hpp

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

#define g_pFrame CFrame::Get()
#define g_pScreen g_pFrame->GetScreen()

#include "CSingleton.hpp"
#include <iostream>
#include <cmath>
#include <SFML\Graphics.hpp>

using namespace std;

class CFrame : public TSingleton<CFrame>
{
public:
    bool                Init        ();
    bool                Init        (int ScreenWidth,int ScreenHeight,
                                     int Colordepth,bool Fullscreen);
    void                Quit        ();
    sf::RenderWindow    *GetScreen  ()  {return m_pScreen;};

    //KEYBOARD/MOUSE INPUT
    bool                KeyDown         (sf::Key::Code KeyID);
    bool                MouseButtonDown (sf::Mouse::Button ButtonID);
    unsigned int        MouseX          ();
    unsigned int        MouseY          ();

    //TIME HANDLING
    float               GetTime         () {return m_pClock->GetElapsedTime();};
    void                SetClock        ();

    //SOUND/MUSIC CONTROL
    float               GetSoundVolume ()                   {return m_fSoundVolume;};
    void                SetSoundVolume (float fSoundVolume) {m_fSoundVolume=fSoundVolume;};
    float               GetMusicVolume ()                   {return m_fMusicVolume;};
    void                SetMusicVolume (float fMusicVolume) {m_fMusicVolume=fMusicVolume;}

private:

    sf::RenderWindow    *m_pScreen;
    sf::Clock           *m_pClock;
    float               m_fSoundVolume;
    float               m_fMusicVolume;

};
#endif


CGame.hpp:

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
#ifndef GAME_HPP
#define GAME_HPP
#define SAFE_DELETE(pt) if(pt!=NULL){delete pt;pt=NULL;}

#include <cmath>
#include "CFrame.hpp"
#include "SFML/System.hpp"
#include "SFML/Audio.hpp"

class CGame
{
public:
    CGame           ();
    ~CGame          ();
    void    Init    ();
    void    Run     ();
    void    Quit    ();
    enum    GameState {GAMEPLAY,EXIT};

private:
    void            HandleInput();
    GameState       m_GameState;
};
#endif


CSingleton.hpp

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

template <class T> class TSingleton
{
    public:
    virtual ~TSingleton() { }

    inline static T *Get()
    {
        if (!m_pSingleton)
            m_pSingleton = new T;

        return (m_pSingleton);
    }

    static void Del()
    {
        if (m_pSingleton)
        {
            delete (m_pSingleton);
            m_pSingleton = 0;
        }
    }

    protected:
    static T *m_pSingleton;
};
// Create static var
template <class T> T *TSingleton<T>::m_pSingleton = 0;
#endif


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

bool CFrame::Init()
{
    int ScreenWidth=1280;
    int ScreenHeight=1024;
    int Colordepth=32;
    bool Fullscreen=false;
    m_fSoundVolume=50.0f;
    m_fMusicVolume=50.0f;

    if (!Init(ScreenWidth,ScreenHeight,Colordepth,Fullscreen)) return false;
    return true;
}
bool CFrame::Init(int ScreenWidth,int ScreenHeight,int Colordepth=32,bool Fullscreen=false)
{
    //create the RenderWindow for Display either Fullscreen or Windowstyle
    m_pScreen=new sf::RenderWindow;
    if (Fullscreen)
    {
        m_pScreen->Create(sf::VideoMode(ScreenWidth,ScreenHeight,Colordepth),"TestApp",sf::Style::Fullscreen);
    }
    else
    {
        m_pScreen->Create(sf::VideoMode(ScreenWidth,ScreenHeight,Colordepth),"TestApp");
    }
    if (m_pScreen==NULL)
    {
        cout << "VideoMode could not been set!" << endl;
        return(false);
    }
    SetClock();
    return (true);
}
void CFrame::Quit()
{
    if (m_pScreen!=NULL)
    {
        m_pScreen->Close();
        delete m_pScreen;
        m_pScreen=NULL;
    }
    if (m_pClock!=NULL)
    {
        delete (m_pClock);
        m_pClock=NULL;
    }
}

bool CFrame::KeyDown(sf::Key::Code KeyID)
{
    const sf::Input &Input=m_pScreen->GetInput();
    return (Input.IsKeyDown(KeyID));
}
unsigned int CFrame::MouseX()
{
    const sf::Input &Input=m_pScreen->GetInput();
    return (Input.GetMouseX());
}
unsigned int CFrame::MouseY()
{
    const sf::Input &Input=m_pScreen->GetInput();
    return (Input.GetMouseY());
}
bool CFrame::MouseButtonDown(sf::Mouse::Button ButtonID)
{
    const sf::Input &Input=m_pScreen->GetInput();
    return (Input.IsMouseButtonDown(ButtonID));
}

void CFrame::SetClock()
{
    m_pClock=new sf::Clock;
    m_pClock->Reset();
}

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

CGame::CGame()
{
}
CGame::~CGame()
{
}
void CGame::Init()
{
    m_GameState=GAMEPLAY;
}
void CGame::Run()
{
    while(g_pScreen->IsOpened())
    {
        g_pScreen->Clear();
        switch(m_GameState)
        {
        case (GAMEPLAY):
            {
                HandleInput();
            }break;
        case (EXIT):
            {
                g_pScreen->Close();
            }break;
        default:
            {
                m_GameState=GAMEPLAY;
            }break;
        }
        g_pScreen->Display();
    }
};

void CGame::Quit()
{
}
void CGame::HandleInput()
{
    sf::Event Event;
    while (g_pScreen->GetEvent(Event))
    {
        // Window closed
        if (Event.Type == sf::Event::Closed)
            g_pScreen->Close();
        if (Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Space)
        {
            m_GameState=GAMEPLAY;
        }
        // Escape key pressed
        if (Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Escape)
        {
            if (m_GameState==GAMEPLAY)
                m_GameState=EXIT;
        }
        //SWITCH GRAVITY ON/OFF
        if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::G))
        {
            std::cout << "Gravity has been turned ON_OFF!" << std::endl;
        }
    }
}

physX

Treue Seele

  • »physX« ist der Autor dieses Themas

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

3

22.09.2009, 12:32

Zitat von »"Das Gurke"«

Und bei welchem Makro genau taucht der Fehler nun auf?


Das zeigt er mir nicht an. Die genaue Fehlermeldung wie ich sie bekomme ist nur

file:1 line:1 und dann die error-msg. Der Fehler muss direkt am Anfang passieren also noch in der CFrame.hpp. Vermute ich zumindest mal.
Kann man codeblocks noch so einstellen, dass man da mehr informationen zu dem Fehler bekommt?

gruss

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

22.09.2009, 13:01

Hast du vielleicht irgendwo nen Makro definiert, dessen namen mit Ziffern beginnt? Die Fehlermeldung lässt vermuten, dass du ein Makro falsch benannt hast.

PS: Warum machst du dir ein Makro auf g_pFrame und nicht einfach direkt die Instanz global?
Soweit es geht sollte man in C++ Makros vermeiden, da die mangelnde Typsicherheit ab und zu Probleme bereiten kann.

physX

Treue Seele

  • »physX« ist der Autor dieses Themas

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

5

22.09.2009, 13:09

Zitat von »"xardias"«

Hast du vielleicht irgendwo nen Makro definiert, dessen namen mit Ziffern beginnt? Die Fehlermeldung lässt vermuten, dass du ein Makro falsch benannt hast.

PS: Warum machst du dir ein Makro auf g_pFrame und nicht einfach direkt die Instanz global?
Soweit es geht sollte man in C++ Makros vermeiden, da die mangelnde Typsicherheit ab und zu Probleme bereiten kann.


wie oben bereits gesagt, keine ziffern, alles was ich an makros verwende ist im code oben angegeben. Bisher bin ich damit auch problemlos gefahren, daher versteh ich momentan auch nicht wo der Fehler sein soll.

Die instanz ist über das singleton bereits global. Das makro ist nur als Schreibhilfe gedacht, um nicht immer den kompletten Ausdruck tippen zu müssen.

gruss

physX

Treue Seele

  • »physX« ist der Autor dieses Themas

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

6

22.09.2009, 13:22

ok ich hab jetzt den kompletten code auf das folgende programm reduziert und bekomme die fehlermeldung immernoch...wtf
woran könnte das denn jetzt noch liegen?

Quellcode

1
2
3
4
5
6
#include <iostream>
int main(int argc,char *argv())
{
    std::cout << "hello world" << std::endl;
    return 1;
};

physX

Treue Seele

  • »physX« ist der Autor dieses Themas

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

7

22.09.2009, 13:34

problem gelöst. muss an codeblocks gelegen haben. schliessen und neues oeffnen von codeblocks hat das problem behoben.
vielleicht weiss ja einer woran das hängt und kann es mir erklären.


Gruss

Werbeanzeige