Template i dziedziczenie

0

Witam . Mam następujący kod:

using namespace std;

template < class T1, class T2>
class Obszar{
public:
T2 nazwa;

public:
    Obszar<T1, T2>():nazwa("POLSKA"){}
    virtual ~Obszar<T1, T2>(){}

};

template < class T1, class T2>
class Miasto: public Obszar<int, string>
{
    T1 x,y;
    static T1 licznik;

public:
    Miasto<T1, T2>();
    virtual ~Miasto<T1, T2>();

};

template < class T1, class T2>
Miasto<T1, T2>::Miasto(): Obszar(), x(0), y(0)
{

}

int main()
{

    Miasto<int, string> m;

    return 0;

}

Po kompilacji mam błąd w linii tworzenia obiektu m:
undefined reference to Miasto<int, std::string>::Miasto()'| undefined reference toMiasto<int, std::string>::~Miasto()'

Po za-komentowaniu wirtualnych destruktorów dostaje: undefined reference to `Miasto<int, std::string>::Miasto()'

Domyślam się, że chodzi o konstruktor.

Dziękuje z góry za każdą poradę.

4
  1. Na pewno nie widzi konstruktora?
  2. Nie masz zdefiniowanego destruktora Miasto
  3. Obszar jest zawsze konkretyzowany dla <int,string> - tak ma być?
  4. Czy dziedziczenie ma tu sens? Warszawa jest Polską?
1

virtual ~Miasto<T1, T2>();
zamień na
virtual ~Miasto<T1, T2>(){}
virtualny destruktor nie ma cielska i się czepia że go nie ma ;)

0
kq napisał(a):
  1. Na pewno nie widzi konstruktora?
  2. Nie masz zdefiniowanego destruktora Miasto
  3. Obszar jest zawsze konkretyzowany dla <int,string> - tak ma być?
  4. Czy dziedziczenie ma tu sens? Warszawa jest Polską?

Ad1 i Ad2 . Rozwiązane, dziękuje bardzo.
Ad3. Tak, na podstawie tego szablonu ma powstać tylko klasa dla <int,string>.(czyli tak jakby template nie był potrzebny, ale muszę go stosować)
Ad4. To dziedziczenie jest na siłę. Widzę teraz, że nie ma sensu, ale muszę dziedziczyć, wykorzystywać polimorfizm, aby zaliczyć przedmiot.
Wykonałbym mój projekt bez tych rzeczy, ale niestety nie mogę. Mogę sprecyzować co mam dokładnie zrobić, może uda Ci się mnie jakoś nakierować .

0

Powiedz w czym obecnie jest problem i jaki jest cel zadania (trochę smutne to dziedziczenie na siłę, ale też miałem takich prowadzących)

0

Celem zadania jest rozwiązanie problemu komiwojażera metoda podziału i ograniczeń. Mam ogólnie pomysł, ale kłóci się to z zamysłem prowadzącego.
Klasy to:
Miasto(zawiera nazwę i współrzędne oraz potrzebne metody),
Koszty(zawiera kontener, w którym będą zawarte odległości między miastami),
Relacja(macierz 2D obiektów klasy Koszty na podstawie których będę obliczał drogę optymalną),
Droga ( zawiera kontener obiektów klasy Miasto w odpowiedniej kolejności).

Jak widać w moim pomyśle brak dziedziczenia , polimorfizmu, czy choćby 'template'-ów, dlatego na siłę chce dodać cokolwiek.

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