Полагаю, вы куда-то отправили объявленный класс M и полностью объявили его только после создания шаблона.
Мой совет: присвойте своим формальным аргументам шаблона имя, отличное от фактических. (т.е. класс М)
// template definition file
#include <list>
template< class aM, class aT >
class C {
std::list<M> m_List;
...
};
Пример неверного форвардного объявления, приводящего к указанной ошибке:
// bad template usage file causing the aforementioned error
class M;
...
C<M,OtherClass> c; // this would result in your error
class M { double data; };
Пример правильного объявления, не приводящего к ошибке:
// better template usage file
class M { double data; }; // or #include the class header
...
C<M,OtherClass> c; // this would have to compile