Czy wszystkie struktury i klasy powinny być zadeklarowane w pliku nagłówkowym? Jeśli deklaruję struct/class w pliku źródłowym, co muszę umieścić w pliku nagłówkowym, aby można go było użyć w innych plikach? Czy są jakieś zasoby, które pokazują niektóre standardowe praktyki C++?Gdzie zadeklarować struktury itp.?
Odpowiedz
Czy wszystkie nagłówki i klasy powinny być zadeklarowane w pliku nagłówkowym?
Tak. EDYCJA: Ale ich implementacje powinny być w plikach cpp. Czasami użytkownicy pochodzący z języka C# lub Java nie zdają sobie sprawy, że implementacja w C++ może być całkowicie niezależna od deklaracji klasy.
Jeśli deklaruję strukturę/klasę w pliku źródłowym, co muszę umieścić w pliku nagłówkowym, aby można go było użyć w innych plikach?
Nie możesz. Kompilator potrzebuje pełnej deklaracji klasy dostępnej w dowolnej jednostce tłumaczeniowej, która używa tej klasy.
Czy są jakieś zasoby, które pokazują niektóre standardowe praktyki C++?
Można po prostu pobrać źródło dla dowolnej liczby aplikacji open source. Chociaż jedyną całkowicie spójną rzeczą, którą prawdopodobnie zobaczysz, jest użycie osłon nagłówka i przechowywanie wszystkich deklaracji w plikach nagłówkowych.
Cały punkt plików nagłówkowych to deklarowanie interfejsów, które mają być współdzielone z innymi plikami źródłowymi. Często ludzie deklarują typy abstrakcyjne w plikach nagłówkowych i stosują je w plikach źródłowych w razie potrzeby. Oznacza to oczywiście, że nowo wprowadzony typ będzie dostępny tylko dla tego konkretnego pliku źródłowego. Jeśli musisz używać typu w wielu plikach (co zwykle ma miejsce), musisz użyć plików nagłówkowych.
C++ faq jest zwykle doskonałym źródłem najlepszych praktyk.
- 1. Gdzie muszę zadeklarować zmienne statyczne?
- 2. Podsumowanie struktury jednostki kontra Gdzie
- 3. Gdzie jest definicja struktury _TP_POOL?
- 4. Gdzie powinienem zadeklarować zmienną sesji w asp.net
- 5. ObjectiveC: gdzie zadeklarować prywatne właściwości instancji?
- 6. W Code Igniter, gdzie powinienem zadeklarować moje zmienne globalne?
- 7. Gdzie mogę znaleźć przykładowe aplikacje (zentasks, itp.) W playframework (2.3. *)?
- 8. C++/Boost MPL: kod struktury podobnie jak Haskella, gdzie,
- 9. Różne struktury danych i Złożoność
- 10. Niestandardowe struktury danych w Pythonie
- 11. Jak zadeklarować strukturę, w której tylko niektórzy członkowie mogą używać wartości z innej struktury?
- 12. Węzeł JS, tradycyjne struktury danych? (np. Set, itp.), coś podobnego do Java.util dla węzła?
- 13. Tworzenie struktury Cocoa
- 14. Serializacja struktury danych Clojure
- 15. Wizualizacja struktury białka
- 16. Jak zadeklarować stałą Int64?
- 17. przodu zadeklarować szablonu alias
- 18. Jak zadeklarować printf()?
- 19. zadeklarować niepoprawny identyfikator bash
- 20. Użyj doxygen do dokumentowania elementów struktury c poza definicją struktury
- 21. Dlaczego ZeroMemory itp. Istnieje, gdy już są pliki memset itp.?
- 22. Czy można zadeklarować tablicę z konfiguracją?
- 23. Jak mogę ograniczyć czas istnienia struktury do struktury "nadrzędnej"?
- 24. % temp% itp. Nie działa
- 25. Polling, Comet, WebSockets, itp.
- 26. Wykładanie struktury
- 27. Struktury zawarte w sekcji .pdata
- 28. Podczas korzystania z <ui: composition> templating, gdzie powinienem zadeklarować <f:metadata>?
- 29. gRaphael Js: gdzie mogę znaleźć samouczki do tworzenia wykresów danych (ciasto, bar itp.)?
- 30. Wyświetlanie komunikatów struktury wiadomości Django
Struktura nie musi być plikiem nagłówkowym, jeśli nie ma zamiaru jej używać w innym pliku źródłowym. Funkcjonariusz napisany dla algorytmu STL jest jednym z takich przykładów. – Naveen
Używam wielu struktur, które są szczegółami implementacji - są one zadeklarowane w plikach .cpp –
-1 Naveen i Neil podali powody, dla których nie należy deklarować * ALL * w nagłówkach. Tak na pytania PO daje mylącą odpowiedź, szczególnie dla początkujących. –