2014-01-07 1 views
0

На vs2005 все в порядке, но на vs2013 не работает. У меня есть код:C++ шаблоны, портирование с vc2005 на 2013

template < 
    typename _path_builder, 
    typename _vertex_allocator 
> 
struct CBuilderAllocatorConstructor { 
    template <template <typename _T> class _vertex> 
    class CDataStorage : 
     public _path_builder::CDataStorage<_vertex>, 
     public _vertex_allocator::CDataStorage<typename _path_builder::CDataStorage<_vertex>::CGraphVertex> 
    { 
    public: 
     typedef typename _path_builder::CDataStorage<_vertex> CDataStorageBase; 
     typedef typename _vertex_allocator::CDataStorage< 
      typename _path_builder::CDataStorage< 
       _vertex 
      >::CGraphVertex 
     > CDataStorageAllocator; 
     typedef typename CDataStorageBase::CGraphVertex CGraphVertex; 
     typedef typename CGraphVertex::_index_type _index_type; 

    public: 
     IC CDataStorage (const u32 vertex_count); 
     virtual ~CDataStorage(); 
     IC void init(); 
    }; 
}; 

Но после того, как портирование на против 2013 года я получил сообщение об ошибке: на линии typedef typename _path_builder::CDataStorage<_vertex> CDataStorageBase;

ошибка C2143: синтаксическая ошибка: отсутствует «» перед „<“ что произойдет ?

EDIT: спасибо всем за ответ, я все исправил

ответ

1

Вы должны ввести ключевое слово template, чтобы синтаксический анализатор знает, что _path_builder::CDataStorage шаблон.

typedef typename _path_builder::template CDataStorage<_vertex> CDataStorageBase; 
           ^^^^^^^^ 

См. here для приятного объяснения.

+0

спасибо за ответ, я все исправил – user3167902

0

По-видимому, это затягивание компилятора. «<», как правило, должен быть «менее», если не предваряется по шаблону ключевых слов:

template < 
typename _path_builder, 
     typename _vertex_allocator 
     > 
     struct CBuilderAllocatorConstructor { 
      template <template <typename _T> class _vertex> 
       class CDataStorage : 
        public _path_builder::template CDataStorage<_vertex>, 
        public _vertex_allocator::template CDataStorage<_path_builder::template CDataStorage<_vertex>::CGraphVertex> 
      { 
       public: 
        typedef typename _path_builder::template CDataStorage<_vertex> CDataStorageBase; 
        typedef typename _vertex_allocator::template CDataStorage< 
         typename _path_builder::template CDataStorage< 
         _vertex 
         >::CGraphVertex 
         > CDataStorageAllocator; 
        typedef typename CDataStorageBase::CGraphVertex CGraphVertex; 
        typedef typename CGraphVertex::_index_type _index_type; 

       public: 
        IC CDataStorage (const u32 vertex_count); 
        virtual ~CDataStorage(); 
        IC void init(); 
      }; 
     }; 

Вот страница MSDN по конкретной ошибке: http://msdn.microsoft.com/en-us/library/0afb82ta.aspxhttp://msdn.microsoft.com/en-us/library/0afb82ta.aspx

+0

«Затягивание» означает «выполнение большего соответствия стандартам». – juanchopanza

+0

благодарит за ответ, все исправлены – user3167902

Смежные вопросы