powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны классов, вложенные типы и наследование.
4 сообщений из 4, страница 1 из 1
Шаблоны классов, вложенные типы и наследование.
    #38024849
Demy85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, уважаемые форумчане.
Перейду сразу к сути вопроса. Есть код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <iostream>

template <typename Type>
class CA
{
public:
	typedef Type value_t;
	CA(value_t value) {}
	value_t get() const { return m_value; }
private:
	value_t m_value;
};

template <typename Type>
class CB : public CA<Type>
{
public:
	//typedef Type value_t;
	CB(value_t value) : CA<Type>(value) {} // Здесь компилятор ругается!!!!
};

int main(int argc, char *argv[])
{
	CB<int> b(1);
	std::cout << b.get();
	return 0;
}


Я шаблоны использую редко, но по моему мнению данный код должен работать. Извиняюсь если не заметил какой-то глупости.

Заранее благодарен ответившим.
...
Рейтинг: 0 / 0
Шаблоны классов, вложенные типы и наследование.
    #38024866
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Demy85,

Проблема заключается в том что в шаблоне CB унаследованном от CA не видны неквалифицированные (без указания типа CA::) имена объявленные внутри CA.

Т.е
Код: plaintext
1.
CB(value_t value) :

надо переписать так
Код: plaintext
1.
CB(typename CA<Type>::value_t value) :  // для квалифицированных зависимых типов нужен также typename



ну или так, если определение в предке в реальном коде такое же тривиальное
Код: plaintext
1.
CB(Type value) :




PS. Я к сожалению не помню конкретный перечень условий при которых эта проблема возникает, но как минимум это должен быть шаблон унаследованный от другого шаблона. Если найду в стандарте это правило - напишу здесь подробнее.
...
Рейтинг: 0 / 0
Шаблоны классов, вложенные типы и наследование.
    #38024867
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще так объявить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
template <typename Type>
class CB : public CA<Type>
{
public:
    typedef typename CA<Type>::value_t value_t;
    CB(value_t value) : CA<Type>(value) {} 
};


Так наверно проще всего и чище код.
...
Рейтинг: 0 / 0
Шаблоны классов, вложенные типы и наследование.
    #38024962
Demy85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Большое спасибо, работает! :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны классов, вложенные типы и наследование.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]