[C++] Dodawanie własnych plików .h

mikkuexc
Użytkownik
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

Post autor: mikkuexc »

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.
Afish
Moderator
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

Post autor: Afish »

Bez kodu się nie obejdzie.
mikkuexc
Użytkownik
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

Post autor: mikkuexc »

Plik main.cpp :

Kod: Zaznacz cały

#include "plansza.h" // dołączamy te pliki 
#include "gracz.h"
....
int main()
....
Teraz jesteśmy w pliku walka.cpp
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?
zhtk
Użytkownik
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

Post autor: zhtk »

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.
Afish
Moderator
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

Post autor: Afish »

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.
ODPOWIEDZ