Podział main na kilka plików

Odpowiedz Nowy wątek
2015-01-26 14:10
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ć?

Pozostało 580 znaków

2015-01-26 14:12
1

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-26 14:16
0

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

Pozostało 580 znaków

2015-01-26 14:21
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.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
2015-01-26 14:24
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?

Pozostało 580 znaków

2015-01-26 14:27
1

Tak. Innej drogi nie ma ;]


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-26 14:28
0

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

Pozostało 580 znaków

2015-01-26 14:39
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.

Pozostało 580 znaków

2015-01-26 16:45
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 ofheap<std::char*>::fixdown()

Pozostało 580 znaków

2015-01-26 17:01
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.


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju, 2015-01-26 17:02

Pozostało 580 znaków

2015-01-26 17:12
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.

Nie możesz po prostu wkleić tych plików? :-| - Endrju 2015-01-26 18:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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