Zmienne globalne w pliku nagłówkowym
Ostatnio zmodyfikowano 2012-05-05 11:58
Trix Temat założony przez niniejszego użytkownika |
Zmienne globalne w pliku nagłówkowym » 2012-05-05 11:08:55 Wyświetla mi błąd podczas stworzenia zmiennej globalnej w OGL. Mam 2 pliki cpp, jeden to "ciało" programu OGL a drugi zawiera funkcje rysującą różne modele .obj Łączy je plik nagłówkowy draw.h Tak wygląda testowy plik draw.h #ifndef __OBJECT DRAW__H__ #define __OBJECT DRAW__H__
#include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h>
GLuint OBJECT_LIST;
bool first_level();
#endif
A tak plik rysujący draw.cpp #include "obj.h" #include "draw.h"
bool first_level() { char filename[] = "cube.obj"; if( !load_obj( filename, OBJECT_LIST ) ) { MessageBox( NULL, "Bład podczas wczytania plików modeli.", "BŁĄD", MB_OK | MB_ICONINFORMATION ); return FALSE; } return TRUE; }
Gdy zmienna GLuint OBJECT_LIST; znajduje się w pliku draw.cpp jest wszystko ok ale gdy już w .h to linker wyświetla błąd: draw.obj : error LNK2005: "unsigned int OBJECT_LIST" (?OBJECT_LIST@@3IA) already defined in main.obj C:\programy w c++\gra 3d\Debug\gra 3d.exe : fatal error LNK1169: one or more multiply defined symbols found ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Może źle definiuje tą zmienną? |
|
xevuel |
» 2012-05-05 11:11:39 Z logu wynika, że zmienną GLuint OBJECT_LIST deklarujesz też w pliku main.cpp jako zmienną globalną, co powoduje konflikt. |
|
Admixior |
» 2012-05-05 11:58:31 Problem: Masz plik main.cpp i draw.cpp w obu tych plikach dołączasz draw.h. W draw.h masz DEFINICJE obiektu... Czyli jak kompilujesz main to dodajesz definicje i w draw.cpp też jest definicja, więc jest multidefinicja (być nie może:).
Rozwiązanie: Do pliku draw.cpp lub main.cpp skopiuj definicje (to co jest w draw.h), a następnie dopisz "extern" przed definicją w pliku draw.h, co spowoduje że zmienisz ją w deklaracje, których może być ile chcesz. |
|
« 1 » |