Вложенные шаблоны с зависимой областью

Что такое зависимая область действия и каково значение typename в контексте следующей ошибки?

$ make g++ -std=gnu++0x main.cpp main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector >::Type' because 'ptrModel<std::vector >' is a dependent scope make: *** [all] Error 1 /* * main.cpp */ #include  #include  template struct ptrModel { typedef std::unique_ptr Type; }; template struct ptrType { typedef ptrModel< std::vector >::Type Type; }; int main() { return 0; } 

Компилятор рассказал вам, что делать. Напишите typename перед ptrModel >::Type , например:

  typedef typename ptrModel >::Type Type; 

Причиной этого требования является то, что на данный момент компилятор не знает, будет ли ptrModel >::Type описывать переменную-член или вложенный тип. Он даже не может понять этого, посмотрев определение ptrModel потому что может быть специализация ptrModel для std::vector где-то еще в программе, что она еще не получила изменений, какие из этих вещей ::Type относится к. Поэтому вам нужно прямо сказать это.

Имя ptrModel >::Type имеет «зависимую область», потому что он находится в области, которая зависит от создания шаблона.

  • Конструктор шаблонов C ++
  • Строки C-Style в качестве аргументов шаблона?
  • Полиморфизм шаблонов C ++
  • Почему бы не вывести параметр шаблона из конструктора?
  • Как принудительно создать экземпляр экземпляра C ++ для экземпляра?
  • Использовать композицию над наследованием
  • Можно ли использовать Razor View Engine вне asp.net
  • Может кто-нибудь объяснить этот код шаблона, который дает мне размер массива?
  • Django передает несколько моделей в один шаблон
  • доступ к защищенным членам суперclassа в C ++ с помощью шаблонов
  • c ++ шаблонная функция частичной специализации
  • Interesting Posts

    Hibernate – foreign keys вместо объектов

    chrome может воспроизводить видео html5 mp4, но html5test сказал, что хром не поддерживает видеокодек mp4

    Почему sizeof (bool) не определяется как один, самим стандартом?

    Android – обнаружит событие разблокировки телефона, а не экран

    Как включить C ++ 11 в CLion?

    Могут ли данные на жестком диске ухудшаться без Windows, предупреждая меня, что это произошло, когда я пытаюсь получить доступ к данным?

    Как сделать SCP файл через промежуточный сервер?

    Asp.net 4.0 не зарегистрирован

    ConcurrentModificationException, несмотря на использование синхронизированного

    Почему компилятор не может вывести тип шаблона из аргументов по умолчанию?

    Что такое амортизированный анализ алгоритмов?

    Что такое пакеты -devel?

    C ++ Qt – Как добавить «-std = c ++ 11» в make-файл, который генерируется qmake?

    Цвет монитора ListView для Android

    Как выбрать последний дочерний элемент в jQuery?

    Давайте будем гением компьютера.