[c++] Szablony klas i definicje metod 3795 4

O temacie

Autor Wonski

Zaczęty 16.12.2015 roku

Wyświetleń 3795

Odpowiedzi 4

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer
Witam serdecznie.
Mam problem dotyczący kilku klas (oczywiście kod przykładowy).
Może najpierw kod.
Szablony klas:
template <typename a1> class Connect
{
public:
a1 integer;

Connect() : integer(0) {};
Connect(a1 value);

a1 get_integer();
bool set_integer(a1 value);

};

template <typename classtype> class Inher_Connect :protected Connect<classtype>
{
public:
Inher_Connect();
Inher_Connect(classtype value);

classtype get_integer();
bool set_integer(classtype value);
};

Kilka metod tych klas:

template <typename classtype> Inher_Connect<classtype>::Inher_Connect() : Connect<classtype>() {};
template <typename classtype> Inher_Connect<classtype>::Inher_Connect(classtype value) : Connect<classtype>(value) {};

template <typename classtype> classtype Inher_Connect<classtype>::get_integer()
{return this->integer;};

template <typename classtype> bool Inher_Connect<classtype>::set_integer(classtype value)
{
try
{this->integer = value;}
catch (...)
{return false;}
return true;
}

template <typename a1> Connect<a1>::Connect(a1 value) : integer(value) {};

template <typename a1> a1 Connect<a1>::get_integer()
{return this->integer;};

template <typename a1> bool Connect<a1>::set_integer(a1 value)
{
try{this->integer = value;}
catch (...)
{return false;}
return true;
}


Problem dotyczy tego, że kompilacja przebiega prawidłowo tylko wtedy jeżeli definicje metod są umieszczone w  pliku nagłówkowym klasy.
Jest to cholernie niewygodne.
Z początku myślałem, ze to ja robię coś źle, no ale okazało się, że to nie moja wina.
Zanim postanowiłem napisać posta na forum to rozejrzałem się trochę po internecie i znalazłem kilka rzeczy, które potencjalnie by rozwiązywały są sprawę, np.:
http://www.gamedev.pl/forum/definicja-metody-klasy-szablonowej
http://xion.org.pl/files/texts/mgt/html/2_4.html
a nawet coś bardziej ekstremalnego
https://www.youtube.com/watch?v=RwdQA0pGWa4 (tego nie próbowałem)

Problem jest w tym, ze 2 pierwsze sposoby nie chcą działać, nwm dlaczego.
Jeżeli ktoś ogarnięty w temacie może mi pomóc wywalić te metody do pliku cpp to będzie mi bardzo miło.

Pozdrawiam i czekam na odpowiedź,
Robert
 

Drock

Drock

Użytkownicy
posty357
Propsy75
ProfesjaProgramista
  • Użytkownicy
@Sztywny możesz wysłać kod który ci nie działa ?
Nawet na PW, ponieważ ciężko pomóc patrząc na przykład a nie na "zepsuty" kod.
 

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer
No właśnie odpisano mi na PW, że to wina języka. Podczas pisania szablonów deklaracje i definicje muszą być w jednym pliku.
Dałem nawet wyżej link na youtube do konferencji c++, podobno do nowego standardu języka (chyba 2017 rok) mają wprowadzić moduły. Dzięki temu problem z rozbijaniem na hpp i cpp będzie miej uciążliwy.

Kodu i tak bym Ci nie wysłał, ponieważ udostępniam go publicznie (i jest go trochę dużo), więc można go w każdej chwili podejrzeć na githubie.
https://github.com/SztywnyPawlo/Algorithm-Work-in-Progress
Pliki które powinny Cię interesować to
connect.hpp,
vertex.hpp
oraz graph.hpp.
 

Drock

Drock

Użytkownicy
posty357
Propsy75
ProfesjaProgramista
  • Użytkownicy
 o_0
Ja z nie mam problemu żeby definicje metod szablonów były w osobnych plikach(pracuje w Visual community 2015 ).
 

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

[c++] Szablony klas i definicje metod
#4 2016-01-01, 21:03(Ostatnia zmiana: 2016-01-01, 22:02)
?
Pokaż kod.

Mi wywala błąd kompilacji. Na wszystkich stronach jakie znalazłem pisze, że kod musi być w jednym pliku.
Od jednego użytkownika z forum dostałem taką wiadomość na PW:
Cytuj
Z tego co wiem implementacje metod szablonowych pisze się w headerach. Wydaje mi się, że to trochę dlatego, bo jakbyś napisał bibliotekę to programista miałby dostęp do headerów i binarnych libek/ddlek i jego kompliator nie wiedziałby jak wygenerować swojego kodu na podstawie szablonu, jeśli go nie ma dostępnego.

tzn. kiedyś była taka możliwość pozwalało na to słowo kluczowe export, ale w nowym standardzie zaczęli mieszać i to słowo straciło swoje magiczne zdolności.

EDIT
Dodam, że pracuję w tym samym IDE co Ty (no prawie tym samym, moja wersja to pro 2015)
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry