«ожидаемый тип-спецификатор» ошибка в g ++ - PullRequest
0 голосов
/ 09 марта 2011

У меня есть класс DD

template<typename T>
class DD
: public IEnumerable<T>
{
    typedef IEnumerable<T> Super;
    typedef std::set<T*> Container;

и метод

template<typename T>
bool DD<T>::Enumerator::Move()
{
    if(!mIt.get()) 
       mIt.reset(
          new Container::iterator( <-----
            mContainer.GetContainer().begin()
          )
       );
       ... 
}

Когда я собираю класс, я получаю error: expected type-specifier. Что не так с Container::iterator()?

Ответы [ 3 ]

12 голосов
/ 09 марта 2011

Попробуйте:

new typename Container::iterator

Когда вы находитесь в шаблоне C ++, компилятор не знает, является ли Container :: iterator типом или чем-то еще.Поэтому вам нужно явно сказать, что это тип.

С другой стороны, создание итератора с новым почти наверняка неверно.

2 голосов
/ 09 марта 2011

Сделай это

new typename Container::iterator(

Подробное объяснение см. в этом FAQ .

2 голосов
/ 09 марта 2011
new typename Container::iterator( 
//  ^^^^^^^^

Без typename C ++ будет предполагать, что X::Y является членом (значением / функцией), когда X находится в шаблоне. Вам нужно typename, чтобы компилятор интерпретировал X::Y как тип.

...