Здравствуйте.
Имеется шаблон класса CXList с локальным классом CXElement
template <class CDataType> class CXList
{
class CXElement
{
...
};
CXElement* GetElement(int iPos);
...
};
Какой должен быть заголовок у реализации функции GetElement ?
В книге по ANSI C++ встретил следующий вариант, самый простой:
template <class CDataType> CXElement* CXList<CDataType>::GetElement (int iPos)
В Borland C++ Builder компилятор говорит, что неизвестен класс CXElement. Работает такой вариант:
template <class CDataType> CXArray<CDataType>::CXElement* CXList<CDataType>::GetElement (int iPos)
В MSVC 7, в свою очередь, не работает ни первый, ни второй вариант.
Как описать функцию в MSVC ? Какой вариант "правильный" (соответствует стандарту) ?
Спасибо.
Здравствуйте, Akai, Вы писали:
A>Здравствуйте.
A>Имеется шаблон класса CXList с локальным классом CXElement
A>A>template <class CDataType> class CXList
A>{
A> class CXElement
A> {
A> ...
A> };
A> CXElement* GetElement(int iPos);
A> ...
A>};
A>
A>Какой должен быть заголовок у реализации функции GetElement ?
A>В книге по ANSI C++ встретил следующий вариант, самый простой:
A>A>template <class CDataType> CXElement* CXList<CDataType>::GetElement (int iPos)
A>
A>В Borland C++ Builder компилятор говорит, что неизвестен класс CXElement. Работает такой вариант:
A>A>template <class CDataType> CXArray<CDataType>::CXElement* CXList<CDataType>::GetElement (int iPos)
A>
A>В MSVC 7, в свою очередь, не работает ни первый, ни второй вариант.
A>Как описать функцию в MSVC ? Какой вариант "правильный" (соответствует стандарту) ?
A>Спасибо.
Работает такой вариант:
template <class CDataType>
typename CXList<CDataType>::CXElement* CXList<CDataType>::GetElement (int iPos)
1. Перед именем типа надо писать typename, т.к. компилятор не знает, что CXList<CDataType>::CXElement — это тип.
2. Перед именем CXElement надо писать CXList<CDataType>:: — т.к. класс CXList<CDataType> является пространством имён.
A>Какой должен быть заголовок у реализации функции GetElement ?
template<class CDataType>
typename <CDataType>::CXElement*
CXList<CDataType>::GetElement(int)
{
return ....;
}
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)