Я считаю, что у вас есть две проблемы в вашем коде.Первая в этом объявлении в myClass2
:
void myfunc(myClass::Mode m);
Поскольку myClass
является шаблоном, вам нужно указать, что это за параметр шаблона.Я предполагаю, что вы, вероятно, хотели написать
void myfunc(myClass<DIM>::Mode m);
Однако из-за странной идиосинкразии в C ++ вы бы написали это как
void myfunc(typename myClass<DIM>::Mode m);
Ключевое слово typename
здесь говорит C ++Mode
- это имя типа, вложенного в класс myClass<DIM>
.
Аналогично, далее в коде код
template<int DIM>
void myClass2<DIM>::myfunc(myClass<DIM>::Mode m)
{
}
должен читаться как
template<int DIM>
void myClass2<DIM>::myfunc(typename myClass<DIM>::Mode m)
{
}
, чтобы сообщить компилятору, что Mode
- это имя типа.
Надеюсь, это поможет!