[c++] Шаблоны и наследование

Oper

Как правильно делать наследование параметризованных классов ?
Пишу такой код:
template <class T>
class a
{
public:
int xxx;
};
template <class T>
class b: public a<T>
{
public:
void init
{
xxx = 0;
}
};
int main
{
return 0;
}
Получаю ошибку: `xxx' undeclared. Что я делаю неправильно ?

lipa

а у меня под VS2005 компилицца

Oper

у меня GNU G++, если имеет значение. Вообще хочеццо знать платформно-независимое решение.

Oper

А так работает:
a<T>::xxx = 0;
Вопрос в принципе решон, но все равно хочецца узнать мнение хорошо разбирающихся в этом людей, почему первоначальный код не работал.

lipa

код-то вроде правильный, вот только компилятор неудосужился проверить, что поле xxx существует только в одном из базовых классов
и дело тут, видимо, совсем не в шаблонах

Realist

Вместо xxx=0 пиши this->xxx=0.
Глубокий смысл этого шамансива пояснить сейчас затрудняюсь, но так действительно требуется писать.

Landstreicher

Твой код не соответствует стандарту С++.
Два варианта есть:
1) A<T>::xxx
2) this->xxx
Читай http://www.ozon.ru/context/detail/id/1521729/, раздел 5.2 (если не изменяет память там это хорошо написано.

Landstreicher

Вот:

Oper

Спасибо.

vampire

14.6.2.3

vampire

упс... припозднился >.<

Varvara79

Привет, нужна помощь!
я никогда не прогала на С, но тут столкнулась с кодом...его надо мне расшифровать и перевести в другой код
там есть такой кусок
fo(k = 1; k<=3; k++) {
 dr1[k] = r[k][nn + 1] - r[k][nn];
 if (fabs (dr1[k]) > regionH[k])...
 dr2[k] = r[k][nn + 2] - r[k][nn + 1];
 if (fabs (dr2[k]) > regionH[k])...
}
внимание, вопрос
это многоточие после оператора if что означает? как его понимать?
пожалуйста, помогите!

nikita270601

Означает, что кто-то съел кусочек кода и на его место написал многоточие

Werdna

ты чей бот женского пола?

Varvara79

почему же сразу бот?

Werdna

Потому что у меня стаж большой, потому и вижу сразу.
Чем — не знаю, но ведь бот!
Оставить комментарий
Имя или ник:
Комментарий: