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

Lurnas

Frischling

  • »Lurnas« ist der Autor dieses Themas

Beiträge: 78

Beruf: Schüler

  • Private Nachricht senden

1

14.07.2004, 17:47

fehler bei make der nicht da sein sollte

Hi,
ich hab folgendes problem:
Ich habe versucht mein programm mit make auszuführen
und bekomme eine Fehlermeldung das ich "doubleBuffer"
doppelt definiert habe obwohl ich das NICHT habe! Hier der code
der betroffenen Dateien(nicht vom namen verwirren lassen^^):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
//kotzing.h
#ifndef KOTZING_HEADER
#define KOTZING_HEADER
#include <allegro.h>

BITMAP*      doubleBuffer = NULL;
extern volatile int timerCounter;

void fatalError(char *str);
void show();

#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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//kotzing.cpp
#include <allegro.h>
#include <time.h>
#include "kotzing.h"
#include "title.h"

volatile int timerCounter = 0;
static void  timerCounterUpdater() 
{
    timerCounter++;    
}
END_OF_STATIC_FUNCTION(timerCounterUpdater);

//Funktionen
void fatalError(char *str) 
{
    allegro_message(str);
    exit(0);
}

int setGfxMode(int mode, int width, int height) 
{
    static int colorDepths[] = { 16, 24, 15, 32};
    int a;  
    
    for (a=0; a < 4; a++) 
    {
        set_color_depth(colorDepths[a]);
        if (set_gfx_mode(mode, width, height, 0, 0) >= 0) 
        {
            return TRUE;
        }
    }
    return FALSE;
}

void show() 
{
    blit(doubleBuffer, screen, 0,0,0,0, doubleBuffer->w, doubleBuffer->h);
}

void init() 
{
    srand(time(NULL));
    
    //init
    allegro_init();

    if (!setGfxMode(GFX_AUTODETECT_FULLSCREEN, 1024, 768)) 
    {
        if (!setGfxMode(GFX_AUTODETECT_WINDOWED, 1024, 768)) 
        {
            fatalError("Unable to set a graphics mode");
        }
    }
    install_timer();    
    install_keyboard();
    install_joystick(JOY_TYPE_AUTODETECT);
    install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);
    
    doubleBuffer = create_bitmap(SCREEN_W, SCREEN_H);
    if (!doubleBuffer) 
    {
        fatalError("Unable to create double buffer");
    }

    LOCK_FUNCTION(timerCounterUpdater);
    LOCK_VARIABLE(timerCounter);
    install_int_ex(timerCounterUpdater, BPS_TO_TIMER(60));
}

//ende
void done() 
{
    destroy_bitmap(doubleBuffer);
}

//main
int main(int argc, char** argv) 
{
    int gameOver = FALSE;
    
    init();
    
    while (!gameOver) 
    {
       title();
    }
    
    done();
} 
END_OF_MAIN();

Quellcode

1
2
3
4
5
6
7
//title.h
#ifndef TITLE_HEADER
#define TITLE_HEADER

int title();

#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
//Title.cpp
#include "kotzing.h"
#include "title.h"

int title()
{
    BITMAP *title = load_bitmap("data/title.bmp", NULL);
    if(!title)
    {
        fatalError("Bild konnte nicht geladen werden: title.bmp");
    }
    
    blit(title, doubleBuffer, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
    destroy_bitmap(title);
    
    //Tastatur abfragen
    clear_keybuf();
    while(!keypressed())
    {
        show();
    }
    
    int keyValue = readkey();
    if ((keyValue >> 8) == KEY_ESC)
    {
        return FALSE;
    }
    clear_keybuf();
    
    return TRUE;
}

Ich verwende Allegro(wers nicht kennt: das ist eine Bibliothek für spiele)
und den mingw32 compiler und keine IDE

gruß Lurnas

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

2

14.07.2004, 18:03

Klar, Deine Header Datei wird in 2 (oder mehr) cpp Dateien includet und in jeder wird einmal doubleBuffer definiert und auf NULL gesetzt.

Pack
BITMAP* doubleBuffer = NULL;
in EINE cpp Datei.

In der Header Datei brauchst Du:
extern BITMAP* doubleBuffer;

Beachte, dass Du also in der cpp Datei mit der ...=NULL Zeile nach dem Ausführen des includes (d.h. Einsetzen des Codes aus der Include Datei in die cpp Datei) oben die extern Zeile hast und weiter unten die Definition. Dies ist laut C(++) Spezifikation ausdrücklich zugelassen.
"Games are algorithmic entertainment."

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

14.07.2004, 18:13

THX für das extern. das wusste ich noch nit. Habe das immer mit einem /force geregelt, was aber nicht die feine englische ist ;D

Lurnas

Frischling

  • »Lurnas« ist der Autor dieses Themas

Beiträge: 78

Beruf: Schüler

  • Private Nachricht senden

4

15.07.2004, 16:35

Mhh,
ich hatte da zuerst das extern, doch da war dann auch nen fehler dann hat ichs wieder nicht ->hat funktioniert
Dann hab ich weitergemacht und dann kam der fehler:
jetzt hab ich das extern hin und das NULL ganz in Ruhe gelassen
und es tut :wirbel:

Werbeanzeige