2010-04-05 15 views
6

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

5

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.

+4

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

+3

Używam wielu struktur, które są szczegółami implementacji - są one zadeklarowane w plikach .cpp –

+1

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

2

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.

Powiązane problemy