Цитата(newgigabyte @ 27.12.2009, 22:17 ) | | std::list<T>::iterator |
Это называется зависимое имя. Т.е. имя iterator зависит от параметра шаблона T (T в данном случае нечто вроде переменной этапа компиляции, т.е. может принимать разные значения). Шаблоны можно специализировать, а это означает что например, если ты специализировал шаблон list для int (чего делать не стоит, потому что он в std:: ) например таким образом:
| Код | namespace std{ //Добаление в std - undefined behavior template<class Allocator = allocator<T>> class list<int, Allocator>{ ... public: ... void iterator(){ //В данном случае это не имя типа а имя функции ... } }; }
|
То компилятор не сможет понять что только для std::list<int>::iterator не является именем класса (типа), поэтому, надо явно указывать typename:
Цитата(jonie @ 27.12.2009, 22:20 ) | делай так: Цитата
typename std::list<T>::iterator a=this->date.begin();//Вот тут вываливает
просто компилятор не может понять, толи ты обращаешься к типу, толи к статическому полю |
|