Podział main na kilka plików

0

Mam problem z podziałem swojego programu na kilka plików. Program zawiera:
Szablon struktury, 4 funkcje poza strukturą. Jeden szablon jest dla typów danych char* i string, drugi dla vector <string>. Siedzę nad tym już kilka godzin i nie potrafię tego podzielić na plik main.cpp, plik.h i plik.cpp. Mógłby ktoś mnie jakoś naprowadzić?

1

Nie da się. Szablon musisz mieć w jednym pliku i tyle.

0

Czyli jedyne, co mogę zrobić, to przerzucić funkcje spoza szablonu do osobnych plików, a szablon zostawić w main?

1

Nie do końca rozumiem. Jeśli masz klasę/strukturę szablonową to nie możesz jej podzielić na nagłówek i implementacje (jak dla zwykłej klasy). Ale oczywiście możesz (i powinieneś!) wyciągnąć calą tą klasę szablonową do osobnego pliku źródłowego.

0

Czyli, jak rozumiem, zwykłe funkcje mam podzielić normalnie, na nagłówek i definicję, a wszystko związane z szablonem klasy zamieścić w pliku powiedzmy xxx.cpp, tak?

1

Tak. Innej drogi nie ma ;]

0

Wielkie dzięki za pomoc, pewnie dalej bym siedział i kombinował ;)

1
eilchner napisał(a):

Czyli, jak rozumiem, zwykłe funkcje mam podzielić normalnie, na nagłówek i definicję, a wszystko związane z szablonem klasy zamieścić w pliku powiedzmy xxx.cpp, tak?

Raczej .h, bo potem chcesz dołączyć to do innych plików.

0

Zrobiłem tak, jak mówiliście, ale wyskakują błędy przy dwóch funkcjach klasy.

template <>
void heap <char*>::fixdown(){
//operacje
}

template <>
void heap <string>::fixdown(){
//operacje
}

Dostaję dwa błędy dotyczące tych funkcji.
heap.h multiple definition of heap<std::string>::fixdown() heap.h multiple definition of heapstd::char*::fixdown()

0

Bo to są specjalizacje. Specjalizacja nie jest szablonem! To konkretna realizacja szablonu. Specjalizacje powinny być w plikach źródłowych, szablony (te "niekonkretne") w plikach nagłówkowych.

0

Teraz inny błąd:
heap.cpp [Error] specialization of 'void heap<type>::fixdown() [with type = char*]' after instantiation
heap.cpp [Error] specialization of 'void heap<type>::fixdown() [with type = std::basic_string<char>]' after instantiation.

W main.cpp mam tylko maina i include "heap.h". W heap.h jest cały szablon i nagłówki pozostałych funkcji. W heap.cpp są definicje tych funkcji i definicje tych dwóch, dla których mam błąd.

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