Compartir a través de


Error del compilador C2993

Actualización: noviembre 2007

Mensaje de error

'identificador' : tipo no válido para el parámetro de plantilla 'parámetro' sin tipo definido
'identifier' : illegal type for non-type template parameter 'parameter'

No se puede declarar una plantilla sin un argumento de estructura o unión. Utilice punteros para pasar estructuras y uniones como parámetros de plantilla.

El ejemplo siguiente genera el error C2993:

// C2993.cpp
// compile with: /c
// C2993 expected
struct MyStruct {
   int a;char b;
};

template <class T, struct MyStruct S>   // C2993

// try the following line instead
// template <class T, struct MyStruct * S>
class CMyClass {};

Este error también puede producirse como resultado del trabajo de conformidad del compilador realizado para Visual Studio .NET 2003; no se permite el uso de parámetros de plantilla sin tipo definido de punto flotante. El estándar C++ no permite el uso de parámetros de plantilla sin tipo definido de punto flotante.

Si se trata de una plantilla de función, utilice un argumento de función para transferir el parámetro de plantilla sin tipo definido de punto flotante (este código será válido en las versiones Visual Studio .NET 2003 y Visual Studio .NET de Visual C++). Si se trata de una plantilla de clase, no hay una solución sencilla.

Para obtener más información, vea Resumen de cambios importantes en tiempo de compilación.

// C2993b.cpp
// compile with: /c
template<class T, float f> void func(T) {}   // C2993

// OK
template<class T>   void func2(T, float) {}