C++/Allegro ponowna definicja zmiennej mimo strażnika nagłówka

2011-06-08 18:59
stefek
0

Mam taki problem. Otóż planuję zrobić prostą gierkę (tak dla wprawy i nauki). I podczas dzielenia całości na poszczególne pliki pojawia się problem, ze jest ponowna definicja zmiennych mimo iż w każdym pliku nagłówkowym umieściłem strażnika nagłówka.

Całość składa się z plików: main.cpp, zmienne.h, P.h oraz P.cpp. Mają one następującą treść:

plik main.cpp

#include <allegro.h>
#include <alfont.h>
#include "zmienne.h"
#include "P.h"
using namespace std;

int main(){

     allegro_init();
     install_keyboard();
     install_mouse();
     set_color_depth(16); alfont_init();
     set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
     bufor=create_bitmap(800,600); 

     while(!key[KEY_ESC]){

              }

     alfont_exit();
     destroy_bitmap(bufor);
     allegro_exit();
}
END_OF_MAIN();

plik zmienne.h

#ifndef ZMIENNE_H
#define ZMIENNE_H

#include <allegro.h>
#include <alfont.h>

short pl;
short xx,yy;
BITMAP *bufor;
ALFONT_FONT *d;

#endif

plik P.h

#ifndef P_H
#define P_H

#include "zmienne.h"

void P001();

#endif

plik P.cpp

#include "P.h"

void P001(){}

No i podczas kompilacji wyskakuje błąd o multidefinicji wszystkich zmiennych z pliku zmienne.h

Znając siebie pewnie jakiś głupi prosty błąd zrobiłem ale jakoś niestety znalezienie go mi nie idzie ;/

Używam Dev'a 4.9.9.2

Z góry dzięki za pomoc

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-06-08 19:48
0

Magiczne słowo extern przy deklaracji zmiennych globalnych. Ogólnie chodzi o to, iż gdy definiujesz zmienne globalne w pliku nagłówkowym przy linkowaniu tego pliku w kilku miejscach dochodzi do tego, że zmienne są zdefiniowane kilkakrotnie. Rozwiązaniem jest użycie słowa extern (np. extern int x;), deklarując tylko zmienną (mówisz kompilatorowi, że taka zmienna gdzieś istnieje i żeby nie szukał jej w tej jednostce translacji - pliku), następnie w jednym tylko pliku, który includuje ten plik z deklaracją dokonujesz definicji zmiennej poprzez int x = 10;. W twoim przypadku, w pliku zmienne.h dodajesz przy zmiennych słowo extern, a następnie tworzysz sobie dodatkowy plik np. zmienne.cpp i w nich dokonujesz definicji zmiennych.

edytowany 1x, ostatnio: stalk3r, 2011-06-08 19:50

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0