Zmienne globalne w pliku .h

0

Cześć, mam taką zagwozdkę: Stworzyłem sobie w pliku .cpp 3 zmienne globalne:

unsigned window_width;
unsigned window_height;
Vector2f cursor;

gdzie Vector2f jest z biblioteki SFML.

Gdy teraz chcę wykorzystać te zmienne w pliku .h i piszę:

extern unsigned window_width;
extern unsigned window_height;

To jest wszystko ok.
Ale jak dodam:

extern Vector2f cursor;

To wywala mi błędy.
obiekt clasy Vector2f mogę wrzucić tylko do pliku .cpp.

Czy może mi ktoś wyjaśnić dlaczego tak jest?

Z góry dziękuję!

0

@Shakaz nagłówki mam zaincludowane w .h

0

W nagłówku trzeba mieć:

extern unsigned window_height;

Natomiast w jednym z plików cpp:

unsigned window_height;

W innym przypadku będziesz miał wielokrotną deklaracje zmiennej jak tylko załączysz plik .h więcej niż do jednego pliku .cpp.

0

@_13th_Dragon tak ma teraz przecież zrobione. Problem w tym, że nie może tego samego zrobić ze zmienną typu Vector2f.

0

Przed wierszem:

extern Vector2f cursor;

Trzeba załączyć odpowiednie dla Vector2f nagłówki czyli:

#include <Vector2.hpp>
0

Huh, ale gupek ze mnie ;-).
extern Vector2f cursor; dawałem po zaincludowaniu bibliotek, ale przed using namespace sf ;/
Dzięki wszystkim za naprowadzenie ;-)

0

Na przyszłość wrzucaj treść błędu, z którym się zmagasz...

@Shakaz dla Twojej wiadomości: treść błędu nie była w ogóle związana z problemem. Do tego ilość błędów, która się pojawiła była liczona w setkach/tysiącach - typu:

Error 271 error C1003: error count exceeds 100; stopping compilation
Error 217 error C2039: 'EmptyTexture' : is not a member of 'TileTextures'
Error 159 error C2061: syntax error : identifier 'RenderWindow'
Error 59 error C2064: term does not evaluate to a function taking 2 arguments
Error 33 error C2065: 'EmptyTexture' : undeclared identifier
Error 91 error C2065: 'sprite' : undeclared identifier

itd.

2
SFMLBegginer napisał(a):

@Shakaz dla Twojej wiadomości: treść błędu nie była w ogóle związana z problemem.
To, że Ty nie jesteś w stanie zauważyć powiązania nie oznacza, że ktoś inny nie jest. Podanie komunikatu błędu w najgorszym przypadku nie pomoże. W tym przypadku jestem pewien, że to było coś o niezdefiniowanym typie/błędnej deklaracji.

0

Dopóki nie jesteś zawodowcem, nigdy nawet nie czytaj trzeciego i dalszych błędów.

@_13th_Dragon wyczuwam w tym zdaniu nutkę ironii - czy może się mylę ;-)

1

Nie ma tu żadnej ironii, wszystkie błędy po tym pierwszym mogą być skutkami tego pierwszego. Więc dopóki nie zaczniesz zauważać kiedy drugi błąd jest skutkiem pierwszego a kiedy nie, dopóty czytać treści tych dalszych błędów nie ma żadnego sensu.

0
SFMLBegginer napisał(a):

Huh, ale gupek ze mnie ;-).
extern Vector2f cursor; dawałem po zaincludowaniu bibliotek, ale przed using namespace sf ;/
Dzięki wszystkim za naprowadzenie ;-)

Nie polecam wrzucania using w plikach .h, chyba, że wykorzystujesz zamiast typedef

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