1

Тема: Проблеми із конструктором при наслідуванні шаблона

Доброго дня, видає помилку в конструкторі дочірнього класу при наслідуванні, не можу зрозуміти в чому проблема.
буду дуже вдячний хто пояснить.

#include <iostream>

using namespace std;
template<typename T, typename T1>

class t {
public:
    T ti;
    T1 tii;
public:
    t(T tt, T1 ttt) :ti(tt), tii(ttt) {}
    void sti() { cout << sizeof(ti) << "<-SIZE\nINPUT->" << ti.gi() << "\n" << sizeof(tii) << "<-SIZE\nINPUT->" << tii.gi(); }
    //void stii (){cout << sizeof(tii)<<"<-SIZE\nINPUT->"<<tii.gi();}
};


template<typename T2, typename T3>

class ts : public t<T3, T2> {
public:
    ts(T2 vl, T3 vll) :t(vl, vll) {}  <---------------ТУТ ПОМИЛКА, не бачить t
};


class g {
    int i;
public:
    g(int ii) { i = ii; }
    int gi() { return i; }
};

int main()
{
    g G(5), F(7);
 
    t<g, g> f(G, F);
    f.sti();

}

2

Re: Проблеми із конструктором при наслідуванні шаблона

Бо шаблон - це не клас. Шаблон - це інструкція, як клас створювати (тобто інстанціювати шаблон). t - це не клас, це шаблон. Ви не можете викликати конструктор шаблону, лише конструктор класу:

  ts(T2 vl, T3 vll) :t<T3,T2>(vl, vll)

P.S. додав вам теги code (кнопка <>). Наступного разу робіть це самостійно; а також називайте ідентифікатори по-людськи, щоб можна було читати. Бажано взагалі дотримуватися певного стилю; не обов'язково того, що за посиланням, але послідовно одного й того самого.

Подякували: Art.gbs, leofun012

3 Востаннє редагувалося lucas-kane (23.01.2021 17:03:13)

Re: Проблеми із конструктором при наслідуванні шаблона

При наслідуванні класу t передавайте конструктору типи котрі оголошені у шаблоні.

template <typename T2, typename T3>
class ts : public t<T2, T3> {
public:
    ts(T2 vl, T3 vll) : t<T2, T3>(vl, vll) { /* ... */ }
};

тоді у main функції буде

int main()
{
    g G(5), F(7);

    t<g, g> ob1(G, F);
    ts<g, g> ob2(G, F);

    obj1.sti();
    obj2.sti();
}
Подякували: Art.gbs1

4

Re: Проблеми із конструктором при наслідуванні шаблона

Дуже вдячний! Все зрозумів)