2014-12-22 4 views
-3

Я читал книгу по шаблону и нашел ниже пример, в котором подчеркивается использование ключевого слова template. Я попытался ниже пример, но он дает ошибкуКак получить из шаблона класса

ожидается имя шаблона до < маркера класса D: общественной оболочки :: шаблон В :: шаблон Deep ^

#include <iostream> 
using namespace std; 

template <typename T> 
class shell { 
public: 
    template<int N> 
    class in { 
    public : 
     template <int M> 
     class Deep { 
      public: 
       virtual void f() { cout << endl << "NO" << endl; } 
     }; 
     }; 
    }; 



template <typename T, int N> 
class weird 
{ 
    public: 
     void case1(typename shell<T>::template In<N>::template Deep<N>* n) 
     { 
      class D : public shell<void>::template In<N>::template Deep<N> 
      { 
       public : 
       virtual void f() { cout << endl << "N" << endl;} 
      }; 
      n = new D(); 
      n-> f(); 
     } 
}; 

int main() { 
    weird<void,1> obj; 
    obj.case1(NULL); 
return 0; 
} 

Заранее спасибо

+2

Какая из них - строка 26? – Barry

+2

'class in' ->' class In', все остальное верно –

ответ

1

Вы используя неправильный случай на одном из ваших классов:

void case1(typename shell<T>::template In<N>::template Deep<N>* n) 
//          ^^^^^ 

Должно быть:

void case1(typename shell<T>::template in<N>::template Deep<N>* n) 

Все остальное в порядке.

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