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
'funzione': argomento di tipo non valido per 'param', elenco di argomenti di tipo mancante per il tipo di classe 'nometipo'
'function' : invalid type argument for 'param', missing type argument list on class type 'typename'
La definizione di una funzione di template prevede che accetti un argomento di tipo di template. Tuttavia è stato passato un argomento template di template.
Nell'esempio seguente viene generato l'errore C3206:
// C3206.cpp
template <class T>
void f() {}
template <class T>
struct S {};
void f1() {
f<S>(); // C3206
// try the following line instead
// f<S<int> >();
}
Possibile soluzione:
// C3206b.cpp
// compile with: /c
template <class T>
void f() {}
template <class T>
struct S {};
void f1() {
f<S<int> >();
}
L'errore C3206 può verificarsi anche quando si utilizzano i generics:
// C3206c.cpp
// compile with: /clr
generic <class GT1>
void gf() {}
generic <class T>
value struct GS {};
int main() {
gf<GS>(); // C3206
}
Possibile soluzione:
// C3206d.cpp
// compile with: /clr
generic <class GT1>
void gf() {}
generic <class T>
value struct GS {};
int main() {
gf<GS<int> >();
}
Questo errore può anche essere generato come risultato delle operazioni di conformità eseguite per Visual C++ .NET 2003, in cui i modelli di classe non sono consentiti come argomento di tipo modello.
Un template di classe non è consentito come argomento di tipo di template: era consentito in Visual C++ .NET 2003 ma non è valido in C++.
Per ulteriori informazioni, vedere Riepilogo delle ultime modifiche in fase di compilazione.
L'esempio riportato di seguito viene compilato in Visual C++ .NET 2002 ma non funziona in Visual C++ .NET 2003:
// C3206e.cpp
template <class T>
struct S {};
template <class T>
void func() { // takes a type
T<int> t;
}
int main() {
func<S>(); // C3206 S is not a type.
}
Possibile soluzione:
// C3206f.cpp
template <class T>
struct S {};
template <class T>
void func() { // takes a type
T t;
}
int main() {
func<S<int> >();
}
Se è necessario un parametro modello di modello, la risoluzione dell'errore valida nelle versioni Visual C++ .NET 2003 e Visual C++ .NET 2002 richiede di includere la funzione in una classe modello che accetti un parametro modello di modello:
// C3206g.cpp
template <class T>
struct S {};
template<template<class> class TT>
struct X {
static void func() {
TT<int> t1;
TT<char> t2;
}
};
int main() {
X<S>::func();
}