[c++] wiele *.h i wiele problemow

0

mam kilka plikow *.cpp (1.cpp, 2.cpp, 3.cpp) i *.h (1.h, 2.h, 3.h).
1.cpp includuje 1.h i 2.h
2cpp. includuje 1.h 2.h 3.h
3.cpp includuje 3.h

Problem jest taki ze sie nie kompiluje:
/tmp/ccw6wVnw.o(.bss+0x0): multiple definition of Log' /tmp/ccfSSDEp.o(.bss+0x8): first defined here /tmp/ccNPUbBx.o(.bss+0x0): multiple definition of gApp'
/tmp/ccfSSDEp.o(.bss+0x4): first defined here
/tmp/ccNPUbBx.o(.bss+0x8): multiple definition of Log' /tmp/ccfSSDEp.o(.bss+0x8): first defined here /tmp/ccJwoRAp.o(.bss+0x0): multiple definition of Log'
/tmp/ccfSSDEp.o(.bss+0x8): first defined here
/tmp/ccKs4zoh.o(.bss+0x0): multiple definition of yDirs' /tmp/ccNPUbBx.o(.bss+0x4): first defined here /tmp/ccKs4zoh.o(.bss+0x8): multiple definition of Log'
/tmp/ccfSSDEp.o(.bss+0x8): first defined here
/tmp/ccbNpwEo.o(.bss+0x0): multiple definition of wMain' /tmp/ccfSSDEp.o(.bss+0x0): first defined here /tmp/ccbNpwEo.o(.bss+0x4): multiple definition of yDirs'
/tmp/ccNPUbBx.o(.bss+0x4): first defined here
/tmp/ccbNpwEo.o(.bss+0x8): multiple definition of yModules' /tmp/ccKs4zoh.o(.bss+0x4): first defined here /tmp/ccbNpwEo.o(.bss+0xc): multiple definition of Log'
/tmp/ccfSSDEp.o(.bss+0x8): first defined here
collect2: ld returned 1 exit status

w plikach *.h deklarowalem:
static klasa * nazwa; - kompiluje sie ale nie dziala
klasa * nazwa; - linker sie czepia
extern klasa * nazwa; - tez nic

chcĘ tylko raz inicjowac klase (nazwa=new klasa()) i zeby byla widoczna wszedzie skad includuje odpowiedni plik naglowkowy. Moze ktos wie jak to zrobic ?

0

cos mi sie wydaje ze to jest blad powtarzajacych sie deklaracji...
wystarczy ze na poczatku naglowka zrobisz cos takiego:

#ifndef _COSTAM1_H
#define _COSTAM1_H

... tresc naglowka

#endif

i tak w takzdym oczywiscie zmieniajac definicje (co naglowek to inna)

jesli to nie zadziala to ja nie wiem :P

0

W naglowkach piszesz:

extern Klasa Obiekt;

A w JEDNYM pliku .cpp piszesz:

Klasa Obiekt;

0

dzieki Krolik, pomoglo

0

Sorki za być może głupie pytanie, ale mam bardzo podobny problem.
Utworzyłem plik var.h w którym są wszystkie zmienne globalne no i chce żeby był do nich dostęp ze wszystkich innych modułów. Jak napiszę wszędzie includy to jest masa błędów typu variables redeclared.
Czy to oznacza że w każdym module muszę je jak gdyby przepisywać z dopiskiem extern na początku?
np mam taką zmienną: char *ProgName = "Program";
czyli rozumiem że musze napisać
extern char *ProgName = "Program";
i tak dla każdej zmiennej którą chce użyć? [???]
Trochę jest to dla mnie bez sensu.
dodam że przesiadam się powoli na C++Buildera z Delphi :D

0
#ifndef var_H
#define var_H
char *ProgName = "Program";
czyli rozumiem że musze napisać
extern char *ProgName = "Program";
#endif
0

W pliku naglowkowym zawsze pisze sie "extern".
Definicje zmiennych globalnych (bez extern) umieszcza sie w pliku .cpp.
Jak umiescisz definicje zmiennych globalnych w pliku naglowkowym, to linker nie bedzie wiedzial, ktora definicja jest "jedyna sluszna".

0

Piszesz tylko :
extern char *ProgName;

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