Partager via


Erreur du compilateur C2993

Mise à jour : novembre 2007

Message d'erreur

'identificateur' : type non conforme pour le paramètre de modèle sans type 'paramètre'
'identifier' : illegal type for non-type template parameter 'parameter'

Vous ne pouvez pas déclarer un modèle avec un argument de type structure ou union. Utilisez des pointeurs pour passer les structures et les unions sous forme de paramètres de modèle.

L'exemple suivant génère l'erreur 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 {};

Cette erreur peut également être due à la mise en conformité du compilateur pour Visual Studio .NET 2003 : les paramètres de modèle sans type à virgule flottante ne sont plus autorisés. Le standard C++ ne permet pas les paramètres de modèle sans type à virgule flottante.

S'il s'agit d'un modèle de fonction, utilisez un argument de fonction pour passer le paramètre de modèle sans type à virgule flottante (ce code sera valide dans les versions Visual Studio .NET 2003 et Visual Studio .NET de Visual C++). S'il s'agit qu'un modèle de classe, il n'existe pas de solution facile à mettre en œuvre.

Pour plus d'informations, consultez Récapitulatif des modifications sans rupture au moment de la compilation.

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

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