Erreur du compilateur C3535
impossible de déduire le type pour « type1 » à partir de « type2 »
Le type de la variable déclarée par le mot clé auto ne peut pas être déduit du type de l'expression d'initialisation.Par exemple, cette erreur se produit si l'expression d'initialisation a la valeur void, ce qui n'est pas un type.
Pour corriger cette erreur
Vérifiez que le type de l'expression d'initialisation n'est pas void.
Vérifiez que la déclaration n'est pas un pointeur vers un type fondamental.Pour plus d'informations, consultez Types fondamentaux (C++).
Vérifiez que si la déclaration est un pointeur vers un type, l'expression d'initialisation est un type pointeur.
Exemple
L'exemple suivant donne C3535 parce que l'expression d'initialisation a la valeur void.
// C3535a.cpp
// Compile with /Zc:auto
void f(){}
int main()
{
auto x = f(); //C3535
return 0;
}
L'exemple suivant donne C3535 parce que l'instruction déclare la variable x comme un pointeur vers un type déduit, mais le type de l'expression d'initialiseur est double.Par conséquent, le compilateur ne peut pas déduire le type de la variable.
// C3535b.cpp
// Compile with /Zc:auto
int main()
{
auto* x = 123.0; // C3535
return 0;
}
L'exemple suivant donne C3535 parce que la variable p déclare un pointeur vers un type déduit, mais l'expression d'initialisation n'est pas un type pointeur.
// C3535c.cpp
// Compile with /Zc:auto
class A { };
A x;
auto *p = x; // C3535