Witam, mam taki problem. Mam plik main.cpp, plansza.h, gracz.h, i walka.cpp.
I teraz w walka.cpp i main.cpp muszę dodać te 2 headery. (plansza i gracz)
Jednak linker zgłasza błąd (multiple definition). Dodam, że #ifndef i #define nie rozwiązują problemu ponieważ, i tak za pierwszym razem jest plik dodawany.
Jakieś propozycje jak to rozwiązać? Pozdrawiam.
[C++] Dodawanie własnych plików .h
-
- Użytkownik
- Posty: 65
- Rejestracja: 19 maja 2011, o 20:33
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 1 raz
- Pomógł: 5 razy
[C++] Dodawanie własnych plików .h
Plik main.cpp :
Teraz jesteśmy w pliku walka.cpp
Znowu potrzebujemy używać tych headerów
Kompilator wywala multiple declaration of (i tutaj były składowe jednego z plików gracz.h czy plansza.h).
Chodzi o to, żeby w pliku walka.cpp nie dodawać znowu tych headerów.
Doczytałem coś o extern. Czy to ma jakiś związek?
Kod: Zaznacz cały
#include "plansza.h" // dołączamy te pliki
#include "gracz.h"
....
int main()
....
Znowu potrzebujemy używać tych headerów
Kod: Zaznacz cały
#include "plansza.h"
#include "gracz.h" // i tutaj dołączamy te pliki ponownie.
void graj(...)
Kompilator wywala multiple declaration of (i tutaj były składowe jednego z plików gracz.h czy plansza.h).
Chodzi o to, żeby w pliku walka.cpp nie dodawać znowu tych headerów.
Doczytałem coś o extern. Czy to ma jakiś związek?
-
- Użytkownik
- Posty: 13
- Rejestracja: 2 kwie 2012, o 10:53
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Pomógł: 2 razy
[C++] Dodawanie własnych plików .h
W kompilatorze borlanda wybierz opcję "smart linking". Jeśli to nie pomoże to:
1. zrób nowy plik cpp, do niego zaincluduj te pliki nagłówkowe,
2. usuń dyrektywę include z plików walka.cpp i main.cpp
3. zrób nowy plik np.: definicje.h
4. w tym pliku umieść definicje (nie deklaracje!) swoich funkcji i zmiennych znajdujących się w innych plikach nagłówkowych
5. dołącz otrzymany nagłówek do plików main.cpp i walka.cpp
6. jeżeli dalej będzie wyskakiwał błąd to dopisz extern do deklaracji
Mam nadzieję, że to pomoże. Jeżeli pomyliłem deklarację z definicją to najmocniej przepraszam.
1. zrób nowy plik cpp, do niego zaincluduj te pliki nagłówkowe,
2. usuń dyrektywę include z plików walka.cpp i main.cpp
3. zrób nowy plik np.: definicje.h
4. w tym pliku umieść definicje (nie deklaracje!) swoich funkcji i zmiennych znajdujących się w innych plikach nagłówkowych
5. dołącz otrzymany nagłówek do plików main.cpp i walka.cpp
6. jeżeli dalej będzie wyskakiwał błąd to dopisz extern do deklaracji
Mam nadzieję, że to pomoże. Jeżeli pomyliłem deklarację z definicją to najmocniej przepraszam.
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[C++] Dodawanie własnych plików .h
Pokaż te fragmenty kodu, które mogą sprawić kłopot. Nagłówek funkcji main jest kompletnie nieistotny - dostajesz od kompilatora błąd, że coś jest kilkakrotnie zadeklarowane, więc pokaż te linie kodu, w których tego czegoś używasz. Poza tym wklej pełny wynik kompilacji.
Zmienne i funkcje globalne umieszcza się w nagłówku z modyfikatorem extern, w dowolnym pliku *.cpp (dokładnie jednym) umieszcza się definicje. Jeżeli masz inaczej (a pewnie masz), to otrzymasz błąd.
Zmienne i funkcje globalne umieszcza się w nagłówku z modyfikatorem extern, w dowolnym pliku *.cpp (dokładnie jednym) umieszcza się definicje. Jeżeli masz inaczej (a pewnie masz), to otrzymasz błąd.