Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Messaggio di errore
'identificatore': tipo non valido per il parametro di template non di tipo 'parametro'
'identifier' : illegal type for non-type template parameter 'parameter'
Non è possibile dichiarare un template con un argomento di struttura o unione. Utilizzare i puntatori per passare strutture e unioni come parametri di template.
Nell'esempio seguente viene generato l'errore 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 {};
Questo errore può anche venire generato come risultato delle operazioni di conformità eseguite per Visual Studio .NET 2003: non sono più consentiti parametri di template non di tipo a virgola mobile. Lo standard C++ non consente parametri di template non di tipo a virgola mobile.
Se si tratta di un template di funzione, utilizzare un argomento di funzione per passare al parametro di template non di tipo a virgola mobile. Questo codice sarà valido nelle versioni Visual Studio .NET 2003 e Visual Studio .NET di Visual C++. Se si tratta di un template di classe, non è disponibile una soluzione semplice.
Per ulteriori informazioni, vedere Riepilogo delle ultime modifiche in fase di compilazione.
// C2993b.cpp
// compile with: /c
template<class T, float f> void func(T) {} // C2993
// OK
template<class T> void func2(T, float) {}