Piszę duży projekt w c++ na zaliczenie. Jest w nim sporo plików h i cpp. Kompletnie nie orientuje się gdzie dawać includy. Czytałem w necie że najlepiej tylko w plikach cpp. Ale przecież są sytuacje, że w plikach h też muszą być includy, np. jak np. klasa zawiera obiekt innej klasy (mam każdą klasę w osobnym pliku. Albo inny przyklad to jak klasa zawiera kontener vector. Wtedy tez jest problem, bo muszę robic include <vector> w h. Czy jest jakas regula albo zasada w programowaniu jak to należy robić? Bo z tego co widzę to jest duży problem jak się to ma źle zrobione bo preprocesor głupieje i wyrzuca bardzo dziwne błędy.
Tak. Zasada jest taka, że jak musisz to załączasz include
'y. W przeciwnym wypadku - nie.
Polecam lekturę: http://jonjagger.blogspot.com/2013/04/the-include-test.html
W pierwszej kolejności w .cpp
, a w .h
tylko to co jest potrzebne w tym .h
.
A kiedy zachodzi ta konieczność includowania w .h? W takich przypadkach jak podałem czy jeszcze jakieś inne przykłady? A rozumiem, że w main.cpp trzeba wszystkie h zaincludowac?
Druga sprawa. Jak mam klasę i dla tej klasy mam przeladowany operator<< poza klasa. Gdzie mam umiescic funkcje operator<<. W pliku w klasa(deklaracja w h, definicja w cpp) czy w main.cpp?
Trzecia sprawa. A using namespace std gdzie umieszczać?
Dostałeś linka, nawet nie musiałeś szukać. Kliknij go.
Definicje funkcji z reguły w .cpp
.
A czy w plikach cpp tez starac sie unikać includow i robić forward declaration?
W większości przypadków to nie ma znaczenia, ale jak czegoś nie używasz to nie inkluduj.