#c #class #templates #visual-c #return-type
#c #класс #шаблоны #visual-c #возвращаемый тип
Вопрос:
Я новичок в C и пытаюсь вернуть значение из size()
члена моего X
класса; возвращаемый тип должен быть of X::size_type
.
template <class T> class X {
public:
typedef size_t size_type;
size_type size() const;
// ...
}
template <class T> X<T>::size_type X<T>::size() const {
// ...
}
Приведенный выше код приводит к ошибкам. Я добавил typename
ранее X<T>::size_type
, и проблема, похоже, исправлена, но я не понимаю, почему…
Это правильный путь?
Комментарии:
1. Да, имя типа здесь правильно.
Ответ №1:
Из-за сложного и иногда неоднозначного синтаксиса C иногда для синтаксического анализатора / компилятора требуются подсказки.
В общем случае при обращении к типам, определенным внутри класса, typename
необходимо намекнуть компилятору, что вы говорите о типе, а не о значении (поскольку X<T>::size_type
может быть и то, и другое).