2011-06-27 3 views
1

Я хочу создать внутренний шаблон шаблона, который будет зависеть от внешнего класса. У меня возникли проблемы, образующая его статические члены:Вложенные шаблоны и инициализация статического члена

template<typename T1, typename T2> 
struct B { 
    template<typename T3> 
    struct C { 
     static T3 m_c; 
    }; 
    static T1 * pT1; 
}; 
template<typename T1, typename T2> 
template<typename T3> 
T3 B<T1,T2>::C<T3>::m_c; 

template<typename T1, typename T2> 
T1 * B<T1,T2>::pT1 = &B<T1,T2>::C<T2>::m_c; 

Я получаю: a.cc:35: ошибка: ожидается, первичное выражение перед «>» лексем a.cc:35: ошибки: ':: m_c' не был объявлен

Как его определить? Спасибо.

+1

Выглядит довольно нормально для меня. Какой компилятор вы используете? –

+0

Код компилируется с использованием VC9, VC10 и [Comeau Online] (http://www.comeaucomputing.com/tryitout/). – sbi

+0

Извините, код был заварен, когда я его разместил. Теперь есть правильный код. – John

ответ

0

Я предполагаю, что ваш компилятор не смог разобрать знак < в качестве открытой скобки объявления шаблона. Постарайтесь прямо сказать, что это шаблон, а не оператор меньше:

template<typename T3> 
T3 B<T1,T2>::template C<T3>::m_c; 
Смежные вопросы