Freigeben über


Compilerfehler C2993

Aktualisiert: November 2007

Fehlermeldung

'Bezeichner' : Ungültiger Typ für den Nichttyp-Vorlagenparameter 'Parameter'
'identifier' : illegal type for non-type template parameter 'parameter'

Eine Vorlage kann nicht mit einem Struktur- oder Unionargument deklariert werden. Verwenden Sie Zeiger, um Strukturen und Unions als Vorlagenparameter zu übergeben.

Im folgenden Beispiel wird C2993 generiert:

// 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 {};

Dieser Fehler wird auch aufgrund einer Verbesserung der Compilerkonformität in Visual Studio .NET 2003 ausgegeben: Nichttyp-Vorlagenparameter in Form von Gleitkommaparametern sind nicht mehr zulässig. Nichttyp-Vorlagenparameter in Form von Gleitkommaparametern sind gemäß C++-Standard nicht zulässig.

Im Falle einer Funktionsvorlage verwenden Sie ein Funktionsargument, um den Gleitkomma-Vorlagenparameter, der kein Typ ist, zu übergeben (dieser Code ist sowohl in der Visual Studio .NET 2003-Version als auch in der Visual Studio .NET-Version von Visual C++ zulässig). Im Falle von Klassenvorlagen gibt es keine einfache Problemumgehung.

Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.

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

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