Compilador erro C3206
Mensagem de erro
'função': argumento de tipo inválido para 'param', lista de argumentos de tipo em tipo de classe 'typename' ausente
Uma função do modelo é definida sistema autônomo tirar um argumento de tipo de modelo.No entanto, foi passado um argumento de modelo do modelo.
O exemplo a seguir gera 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> >();
}
Resolução possível:
// C3206b.cpp
// compile with: /c
template <class T>
void f() {}
template <class T>
struct S {};
void f1() {
f<S<int> >();
}
C3206 também pode ocorrer ao usar genéricos:
// C3206c.cpp
// compile with: /clr
generic <class GT1>
void gf() {}
generic <class T>
value struct GS {};
int main() {
gf<GS>(); // C3206
}
Resolução possível:
// C3206d.cpp
// compile with: /clr
generic <class GT1>
void gf() {}
generic <class T>
value struct GS {};
int main() {
gf<GS<int> >();
}
Este erro também pode ser gerado sistema autônomo resultado do trabalho de conformidade compilador Visual C++ .NET 2003, onde sistema autônomo modelos de classe não são permitidos sistema autônomo argumento de tipo de modelo.
Um modelo de classe não é permitido sistema autônomo argumento de tipo de modelo.Isso funcionou no Visual C++ .NET 2003, mas é C++ inválido.
Para obter mais informações, consulte Resumo das alterações de quebras de time de compilar.
O exemplo a seguir é compilado no Visual C++ .NET 2002, mas haverá falha no 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.
}
Resolução possível:
// C3206f.cpp
template <class T>
struct S {};
template <class T>
void func() { // takes a type
T t;
}
int main() {
func<S<int> >();
}
Se for necessário um parâmetro de modelo do modelo, em seguida, a resolução para o erro é válido para as versões do Visual C++ .NET 2002 e Visual C++ .NET 2003 exigem que você encapsular a função em uma classe de modelo que leva um parâmetro de modelo do modelo:
// 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();
}