Muy bien. Te estoy explicando el problema al que te enfrentas. Pero primero lo primero. Usted dijo:
I wrote a template class which is giving compilation error
En primer lugar, en lo que se refiere a C++, no hay tal cosa como una "clase de plantilla," sólo hay una "plantilla de clase." La forma de leer esa frase es "una plantilla para una clase", en oposición a una "plantilla de función", que es "una plantilla para una función". De nuevo: las clases no definen plantillas, las plantillas definen clases (y funciones). * Citado de here.
Ahora, vamos a ver el error:
fatal error C1202: recursive type or function dependency context too complex
El error dice todo. $14.7.1
del estándar explica muy bien la causa de su problema, brindándole incluso un ejemplo que es muy similar a lo que está haciendo. Así que ni siquiera necesito escribir una sola palabra propia.Aquí es $14.7.1
4 There is an implementation-defined quantity that specifies the limit on the total depth of recursive instantiations, which could involve more than one template. The result of an infinite recursion in instantiation is undefined. [ Example:
template < class T > class X {
X<T >* p; // OK
X<T*> a; //implicit generation of X<T> requires
//the implicit instantiation of X<T*> which requires
//the implicit instantiation of X<T**> which ...
};
—end example ]
Por favor, lea el comentario con X<T*> a
, que es casi lo mismo con usted también. Así que el problema no se debe a la función recursiva, es más bien debido a instanciación recursiva de plantilla de clase, haciendo de estas líneas:
Entity<T*> pPrev;
Entity<T*> pNext;
Esperanza, que resuelve su problema!
EDIT: Pero me pregunto ¿qué estás tratando de lograr con Entity<T*> pPrev
? Parece que es un error tipográfico, y probablemente quieras escribir Entity<T>* pPrev
. Lo mismo con pNext
. ¿Es eso así?
Y un consejo para mejorar el diseño: Use la lista de Inicialización de miembros, en lugar de la Asignación. Es decir, escribir el constructor de la siguiente manera,
Entity<T>(const string & name, int size) : EntityName(name), EntitySize(size)
{
//all assignments moved to initialization list.
}
Lea esto: Why should I prefer to use member initialization list?
era un error tipográfico. Corregí eso y solucionó el error. muchas gracias. –