LINUX.ORG.RU

А что тут такого? Ведь шаблон это ещё не класс. Классом он станет в точке инстанцирования конкретным типом. А в этой точке этот тип уже очень даже известен.

ebersen
()
Ответ на: комментарий от hbee

Дело в том что при компиляции вылетает

error: there are no arguments to `xxx' that depend on a template parameter, so a declaration of `xxx' must be available

т.е. я не могу использовать метод 'xxx' базового шаблона?

faustmen
() автор топика
Ответ на: комментарий от faustmen

Блин. Просто ПЕРЕВЕДИ на русский то, что написал тебе компилятор и ты все поймешь

anonymous
()
Ответ на: комментарий от faustmen

Вот код, который отлично собирается и (если это можно так назвать) "работает". А в чём 10 отличий этого кода от твоего?

#include <iostream>

template <class A> class B: public A { public: B() { std::cout << "in B::B()" << std::endl; f(); } };

class AA { public: AA() { std::cout << "in AA::AA()" << std::endl; } void f() {std::cout << "in AA::f()" << std::endl; } };

int main() { B<AA> b; return 0; }

------------------ output ---------------- in AA::AA() in B::B() in AA::f()

ebersen
()
Ответ на: комментарий от ebersen

Хороший пример, спасибо. Если в вышеуказанном примере из класса B вызывается ф-ция базового класса f() без ошибок, то у меня при компиляции вылетают ошибки о:

неопределённых переменных (т.е. в базовом классе должно быть определение переменной vvv, а при шаблонном наследовании в некоторых методах мы используем эту переменную, её не обьявляя в шаблонном классе). Приходится "руками" её затаскивать в детёнка, чтобы не было ошибок

С ф-циями (о чём писал выше)

Отличий больших от примера не вижу. Но в чём здесь может быть проблема??

faustmen
() автор топика
Ответ на: комментарий от faustmen

усложняем пример (тоже отлично собирается):

#include <iostream>

template <class A>
class B: public A
{
public:
B()
{
std::cout << "in B::B()" << std::endl;
f(vvv);
std::cout << "vvv: " << vvv << std::endl;
}
};


class AA
{
public:
AA(): vvv(33) { std::cout << "in AA::AA()" << std::endl; }
void f(int v) {std::cout << "in AA::f(int v): "<< vvv << std::endl; }
int vvv;
};


int main()
{
B<AA> b;
return 0;
}

--------- output ----------

in AA::AA()
in B::B()
in AA::f(int v): 33
vvv: 33




ebersen
()
Ответ на: комментарий от hbee

Большое спасибо за помощь! Последний документ помог особо! В данном случае над было сказать this->, т.к. теперь базовый класс не неймспейсится

faustmen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.